【问题标题】:Crawling multiple starting urls with different depth抓取具有不同深度的多个起始网址
【发布时间】:2025-12-13 03:45:02
【问题描述】:

我正在尝试让 Scrapy 0.12 为蜘蛛的 start_urls 变量中的不同 url 更改它的“最大深度”设置。

如果我对文档的理解正确,那是没有办法的,因为 DEPTH_LIMIT 设置对于整个框架都是全局的,并且没有“请求源自初始请求”的概念。

有没有办法避免这种情况?是否可以使用每个起始 url 和不同的深度限制初始化同一个蜘蛛的多个实例?

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    抱歉,我好像从一开始就没有正确理解你的问题。更正我的答案:

    响应中有depth 键为meta。您可以检查它并采取适当的措施。

    class MySpider(BaseSpider):
    
        def make_requests_from_url(self, url):
            return Request(url, dont_filter=True, meta={'start_url': url})
    
        def parse(self, response):
            if response.meta['start_url'] == '???' and response.meta['depth'] > 10:
                # do something here for exceeding limit for this start url
            else:
                # find links and yield requests for them with passing the start url
                yield Request(other_url, meta={'start_url': response.meta['start_url']})
    

    http://doc.scrapy.org/en/0.12/topics/spiders.html#scrapy.spider.BaseSpider.make_requests_from_url

    【讨论】:

    • 那行不通,因为从响应中没有简单的方法可以知道它是由来自起始 URL 的请求生成的,但现在我想,如果原始请求有,它可能是可行的从一开始就超过 1 的 meta['depth']。我看看代码
    最近更新 更多