【问题标题】:Overriding parse_start_url() in Scrapy and limiting crawl depth to 1在 Scrapy 中覆盖 parse_start_url() 并将抓取深度限制为 1
【发布时间】:2015-01-08 23:30:56
【问题描述】:

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

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

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

或者我应该写自己的DepthMiddleware

【问题讨论】:

    标签: python web-scraping scrapy web-crawler


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-04
      • 2011-06-16
      • 2016-03-15
      • 2013-03-28
      • 2014-05-04
      相关资源
      最近更新 更多