gpt4 book ai didi

python - Scrapy:根据从自定义配置读取的值覆盖 DEPTH_LIMIT 变量

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:03 26 4
gpt4 key购买 nike

我正在使用 InitSpider 并在 def __init__(self, *a, **kw): 方法中读取自定义 json 配置.

json 配置文件包含一个指令,我可以用它来控制爬网深度。我已经可以成功读取此配置文件并提取值。主要问题是如何告诉 scrapy 使用这个值。

注意:我不想使用命令行参数,例如 -s DEPTH_LIMIT=3,我实际上想从我的自定义配置中解析它。

最佳答案

DEPTH_LIMIT 用于 scrapy.spidermiddlewares.depth.DepthMiddleware .您可能已经快速查看了代码,您会发现 DEPTH_LIMIT 值在初始化该中间件时是只读的。

我认为这对您来说可能是一个很好的解决方案:

  1. 在蜘蛛的 __init__ 方法中,将蜘蛛属性 max_depth 设置为您的自定义值。
  2. 覆盖 scrapy.spidermiddlewares.depth.DepthMiddleware 并让它检查 max_depth 属性。
  3. 禁用默认的 DepthMiddleware 并在设置中启用您自己的。

另见 http://doc.scrapy.org/en/latest/topics/spider-middleware.html

步骤 #2 中描述的重写中间件的快速示例:

class MyDepthMiddleware(DepthMiddleware):

def process_spider_output(self, response, result, spider):
if hasattr(spider, 'max_depth'):
self.maxdepth = getattr(spider, 'max_depth')
return super(MyDepthMiddleware, self).process_spider_output(response, result, spider)

关于python - Scrapy:根据从自定义配置读取的值覆盖 DEPTH_LIMIT 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38635787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com