我对此很陌生,现在已经开始研究蜘蛛/爬行器一周了。
我一直在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)
答案 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 = ""