如何防止死循环

在Scrapy的默认配置中,是根据url进行去重的。这个对付一般网站是够的。但是有一些网站的SEO做的很变态:为了让爬虫多抓,会根据request,动态的生成一些链接,导致爬虫 在网站上抓取大量的随机页面,甚至是死循环。。

为了解决这个问题,有2个方案:

(1) 在setting.py中,设定爬虫的嵌套次数上限(全局设定,实际是通过DepthMiddleware实现的):

DEPTH_LIMIT = 20

(2) 在parse中通过读取response来自行判断(spider级别设定) :

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