python / scrapy问题:如何避免无限循环

时间:2011-07-13 18:59:54

标签: python loops scrapy web-crawler

我正在使用网络抓取框架scrapy来挖掘某些网站的数据。我正在尝试使用CrawlSpider,页面有一个“后退”和“下一步”按钮。网址格式为

www.qwerty.com/###

其中###是每次按下下一个按钮时递增的数字。如何格式化规则以便不会发生无限循环。

这是我的规则:

rules = (
        Rule(SgmlLinkExtractor(allow='http://not-a-real-site.com/trunk-framework/791'),follow=True,callback='parse_item',
    ),
)

3 个答案:

答案 0 :(得分:8)

不应该发生无限循环。 Scrapy将过滤掉重复的网址。

答案 1 :(得分:1)

是什么让你觉得程序会进入无限循环,你是如何测试它的? scrapy如果以前已经完成它,就不会下载网址。您是否尝试浏览所有页面,当您在最后一页上单击下一步时会发生什么?

您可以进入无限循环如果每次按下下一个链接时网站都会生成一个新数字。虽然案例是破坏了站点代码,但您可以对代码中的最大页数进行限制,以避免无限循环。

答案 2 :(得分:1)

您可以设置要遵循的链接数限制:使用DEPTH_LIMIT设置。

或者,您可以在解析回调函数中检查当前深度:

def parse(self, response):
    if response.meta['depth'] > 100:
        print 'Loop?'