在Scrapy中覆盖parse_start_url()并将爬网深度限制为1

时间:2015-01-08 23:30:57

标签: python web-scraping scrapy web-crawler

我正在使用Scrapy抓取网站并覆盖parse_start_url()以便抓取起始网址。

然而,这意味着当我将DEPTH_LIMIT设置为1时,Scrapy会在深度2处爬行(因为我认为如果它们通常被解析,那么起始网址不计入深度是有意义的)。在1以外的任何深度爬行时都可以,因为我可以将DEPTH_LIMIT减少1来解决这个问题。但是,在深度1处爬行时,这将不起作用,因为DEPTH_LIMIT为0被视为无限深度。

有人会想到一种解析起始网址并且深度限制为1的方法吗?

或者我应该自己编写DepthMiddleware

1 个答案:

答案 0 :(得分: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
            ...