У меня возникли некоторые проблемы при очистке страницы secod по ссылке на первую страницу в Amazon - PullRequest
2 голосов
/ 23 октября 2019

Я проводил эксперимент по сбору информации о Amazon, поэтому я хотел перейти по ссылке на первой странице, а затем перейти по ссылке, чтобы загрузить некоторую информацию. но у меня были некоторые проблемы, это случалось так много раз, что я не мог продолжать. Я прошу вашей помощи

shuju.py

from AmazonsPro.items import AmazonsproItem


class ShujuSpider(scrapy.Spider):
    name = 'shuju'
    #allowed_domains = ['www.amazon.com']
    start_urls = ['https://www.amazon.com/Best-Sellers-Office-Products-Woodcase-Lead-Pencils/zgbs/office-products/490674011/ref=zg_bs_pg_1?_encoding=UTF8&pg=1']

    def parse(self, response):
        li_list=response.xpath('//ol[@id="zg-ordered-list"]/li')
        link_list=[]
        for li in li_list:
            #get the link
            link='www.amazon.com'+li.xpath('.//span[@class="aok-inline-block zg-item"]/a/@href').extract_first()
            #get the rank
            rank=li.xpath('.//span[@class="a-size-small aok-float-left zg-badge-body zg-badge-color"]/span/text()').extract_first()
            link_list.append(link)
        for link in link_list:
            print(link)
            yield scrapy.Request(url=link,callback=self.sec_parse)
    #get the the second page 
    def sec_parse(self,response):
        item=AmazonsproItem()
        print('star second page')
        title=response.xpath('.//*[@id="productTitle"]/text()').extract_first()
        brand=response.xpath('.//*[@id="bylineInfo"]/text()').extract_first()
        item['title']=title
        item['brand']=brand
        print('done')
        yield item

setting.py


ROBOTSTXT_OBEY = False

ITEM_PIPELINES = {
    'AmazonsPro.pipelines.AmazonsproPipeline': 300,
    }

pipelines.py

    fp=None
    def open_spider(self,spider):
        print('star scrapy')
        self.fp = open('./Asin.txt','w')

    def process_item(self,item,spider):
        self.fp.write(item['rank']+"+"+item['brand']+"+"+item['title']+"+"+item['star'])
        return item

    def close_spider(self,spider):
        self.fp.close()
        print('over')

пунктов. py

    # define the fields for your item here like:
    # name = scrapy.Field()
    rank=scrapy.Field()
    title=scrapy.Field()
    link=scrapy.Field()
    brand=scrapy.Field()

Ошибка не возникает, но она запускает функцию def sec_parse () всего один раз (фактически 50 раз). Надеюсь, вы можете помочь

1 Ответ

0 голосов
/ 27 октября 2019

Gotcha, я не добавил https: // по ссылке, поэтому он не будет работать. Thxs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...