在Scrapy Cloud中运行蜘蛛时出现不一致的错误

时间:2017-09-28 09:55:35

标签: python-3.x scrapy scrapy-spider

我对此很陌生,现在已经开始研究蜘蛛/爬行器一周了。

我一直在Scrapy中设置蜘蛛。昨天推出了我的第一个完成的蜘蛛。除了偶尔弹出的这个错误之外,一切似乎都顺利进行。

在4个作业中收到以下错误,但在蜘蛛中的同一页面(或时间)没有收到:

next_page_url = response.css('div.indexering > a::attr(href)').extract()[-1]
IndexError: list index out of range

这些是工作,当出现错误时:

Job 1: 
39: 2017-09-27 09:00:03 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=102> (referer: [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=101][1])

Job 2:
46: 2017-09-27 10:00:05 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=98> (referer [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=97][1])

Job 3:
55: 2017-09-27 12:00:07 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=159> (referer: [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=158][1])

Job 4:
18: 2017-09-27 14:00:11 ERROR [scrapy.core.scraper] Spider error processing <GET https://www.baby-dump.be/zoeken/?zoek=*/&pnr=22> (referer: [https://www.baby-dump.be/zoeken/?zoek=*/&pnr=21][1])

如果我正确解释错误,看起来似乎没有找到预期的“下一步”按钮(蜘蛛正在寻找)。

这不可能是因为如果查看作业,则错误不一致。它随机出现。

编辑:添加了下面发生错误的代码段。

def parse(self, response):
    #get all product detail pages links
    urls = response.css('div.product-image > a::attr(href)').extract()
    for url in urls:
        url = response.urljoin(url)
        yield scrapy.Request(url=url, callback=self.parse_details)

    #get next page and follow
    next_page_url = response.css('div.indexering > a::attr(href)').extract()[-1]
    if next_page_url:
        next_page_url = response.urljoin(next_page_url)
        yield scrapy.Request(url=next_page_url, callback=self.parse)

1 个答案:

答案 0 :(得分:0)

您的问题主要发生在下一页根本不存在的情况下。可能在最后一页?您应该将代码更改为以下,以便知道最后一页是否存在

next_page_url = response.css('div.indexering > a::attr(href)')

if next_page_url:
   next_page_url = next_page_url.extract()[-1]
else:
   next_page_url = ""