2015-01-08 39 views
2

我正在使用Scrapy來抓取網站並已覆蓋parse_start_url()以便抓取起始網址。覆蓋Scrapy中的parse_start_url(),並將爬網深度限制爲1

但是,這意味着當我將DEPTH_LIMIT設置爲1時,Scrapy在深度2處抓取(因爲我認爲開始url不需要計算深度,如果它們通常被解析)。在1以外的任何深度爬行時,這是可以的,因爲我可以將DEPTH_LIMIT減1以解決此問題。但是,當在深度1上爬網時,這將不起作用,因爲0的DEPTH_LIMIT被視爲無限深度。

任何人都可以想出一種解析起始網址的方法,並且深度限制爲1?

或者我應該寫我自己的DepthMiddleware

回答

3

當您從parse_start_url()法得出的請求,設置meta['depth']

yield Request(url, meta={'depth': 1}) 

這應當自後,當反應會到達這樣的伎倆,在DepthMiddleware它會增加1:

def process_spider_output(self, response, result, spider): 
    def _filter(request): 
     if isinstance(request, Request): 
      depth = response.meta['depth'] + 1 
      ...