我正在使用Scrapy抓取网站并覆盖parse_start_url()
以便抓取起始网址。
然而,这意味着当我将DEPTH_LIMIT
设置为1时,Scrapy会在深度2处爬行(因为我认为如果它们通常被解析,那么起始网址不计入深度是有意义的)。在1以外的任何深度爬行时都可以,因为我可以将DEPTH_LIMIT
减少1来解决这个问题。但是,在深度1处爬行时,这将不起作用,因为DEPTH_LIMIT
为0被视为无限深度。
有人会想到一种解析起始网址并且深度限制为1的方法吗?
或者我应该自己编写DepthMiddleware
?
答案 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
...