Python/Scrapy 问题:如何避免无限循环
我正在使用一个叫做scrapy的网络爬虫框架来从一些网站上提取数据。我想用CrawlSpider这个工具,而这些页面上有“后退”和“下一页”按钮。它们的链接格式是这样的:
www.qwerty.com/###
其中###是一个数字,每次点击“下一页”按钮时,这个数字就会增加。请问我该如何设置规则,以避免出现无限循环的情况呢?
这是我的规则:
rules = (
Rule(SgmlLinkExtractor(allow='http://not-a-real-site.com/trunk-framework/791'),follow=True,callback='parse_item',
),
)
3 个回答
1
你可以设置一个限制,来控制要跟踪的链接数量:使用 DEPTH_LIMIT
这个设置。
另外,你也可以在解析回调函数中检查当前的深度:
def parse(self, response):
if response.meta['depth'] > 100:
print 'Loop?'
1
你为什么觉得这个程序会进入无限循环呢?你是怎么测试的?
Scrapy(一个爬虫框架)不会重复下载已经下载过的链接。你有没有尝试浏览所有页面?当你在最后一页点击“下一页”时会发生什么?
如果网站每次点击“下一页”时都会生成一个新的链接,就可能会进入无限循环。虽然这其实是网站代码的问题,但你可以在你的代码里设置一个最大页面数的限制,这样就能避免无限循环了。
8
无尽循环是不应该发生的。Scrapy会过滤掉重复的网址。