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

Overriding parse_start_url() in Scrapy and limiting crawl depth to 1

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

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

谁能想出一种方法来解析起始 URL 并将深度限制为 1?

还是我自己写DepthMiddleware

当您从 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
            ...