【发布时间】:2025-12-13 03:45:02
【问题描述】:
我正在尝试让 Scrapy 0.12 为蜘蛛的 start_urls 变量中的不同 url 更改它的“最大深度”设置。
如果我对文档的理解正确,那是没有办法的,因为 DEPTH_LIMIT 设置对于整个框架都是全局的,并且没有“请求源自初始请求”的概念。
有没有办法避免这种情况?是否可以使用每个起始 url 和不同的深度限制初始化同一个蜘蛛的多个实例?
【问题讨论】:
我正在尝试让 Scrapy 0.12 为蜘蛛的 start_urls 变量中的不同 url 更改它的“最大深度”设置。
如果我对文档的理解正确,那是没有办法的,因为 DEPTH_LIMIT 设置对于整个框架都是全局的,并且没有“请求源自初始请求”的概念。
有没有办法避免这种情况?是否可以使用每个起始 url 和不同的深度限制初始化同一个蜘蛛的多个实例?
【问题讨论】:
抱歉,我好像从一开始就没有正确理解你的问题。更正我的答案:
响应中有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
【讨论】: