пункт загрузчик пропустить значения scrapy - PullRequest
0 голосов
/ 21 января 2019

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

код паука:

class AllDataSpider(scrapy.Spider):

    name = 'all_data'  # spider name
    allowed_domains = ['amazon.com']

    # write the start url
    start_urls = ["https://www.amazon.com/s? bbn=2619533011&rh=n%3A2619533011%2Cp_n_availability%3A2661601011&ie=UTF8&qid =1541604856&ref=lp_2619533011_nr_p_n_availability_1"]

    custom_settings = {'FEED_URI': 'pets_.csv'}  # write csv file name

    def parse(self, response):
        '''
        function parses item information from category page
        '''

        self.category = response.xpath('//span[contains(@class, "nav-a- 
                                       content")]//text()').extract_first()

        urls = response.xpath('//*[@data-asin]//@data-asin').extract()

        for url in urls:
            base = f"https://www.amazon.com/dp/{url}"
            yield scrapy.Request(base, callback=self.parse_item)

        next_page = response.xpath('//* 
                                  [text()="Next"]//@href').extract_first()
        if next_page is not None:
            yield scrapy.Request(response.urljoin(next_page), 
                                 dont_filter=True)

    def parse_item(self, response):
        loader = AmazonDataLoader(selector=response)
        loader.add_xpath("Availability", '//div[contains(@id, 
                         "availability")]//span//text()')
        loader.add_xpath("NAME", '//h1[@id="title"]//text()')
        loader.add_xpath("ASIN", '//*[@data-asin]//@data-asin')
        loader.add_xpath("REVIEWS", '//span[contains(@id, 
                          "Review")]//text()')
        rank_check = response.xpath('//*[@id="SalesRank"]//text()')
        if len(rank_check) > 0:
            loader.add_xpath("RANKING", '//*[@id="SalesRank"]//text()')

        else:
            loader.add_xpath("RANKING", '//span//span[contains(text(), "#")] 
                             [1]//text()')

        loader.add_value("CATEGORY", self.category)

        return loader.load_item()

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

 DEBUG: Scraped from <200 https://www.amazon.com/dp/B0009X29WK>
{'ASIN': 'B0009X29WK',
 'Availability': 'In Stock.',
 'NAME': " Dr. Elsey's Cat Ultra Premium Clumping Cat Litter, 40 pound bag ( "
         'Pack May Vary ) ',
 'RANKING': '#1',
 'REVIEWS': '13,612'}
2019-01-21 21:13:07 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.amazon.com/dp/B01N9KSITZ> (referer: https://www.amazon.com/s?i=pets&bbn=2619533011&rh=n%3A2619533011%2Cp_n_availability%3A2661601011&lo=grid&page=2&ie=UTF8&qid=1548097190&ref=sr_pg_1)
2019-01-21 21:13:07 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.amazon.com/dp/B01N9KSITZ>
{}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...