You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何在__init__方法内修改类变量?Scrapy配置修改不生效求解

Scrapy 命令行动态修改DOWNLOAD_DELAY不生效的解决方案

问题根因

  1. 你代码中类作用域下的print(custom_settings['DOWNLOAD_DELAY'])会在Python加载testSpider类定义时就执行,远早于命令行参数解析、爬虫实例初始化的流程,所以输出默认值10是正常现象,并不代表类变量修改失败。
  2. Scrapy的配置加载逻辑是:在爬虫实例创建前,就会读取爬虫类的custom_settings属性生成全局生效的配置对象,你在__init__方法中修改类的custom_settings属性时,全局配置已经加载完成,所以修改不会生效。

解决方法

直接修改爬虫实例绑定的settings对象即可,修改时指定优先级为spider,确保能覆盖默认配置,修改后代码如下:

from scrapy.spiders import CrawlSpider

class testSpider(CrawlSpider):
    name = 'test'
    custom_settings = {
        'DOWNLOAD_DELAY': 10,  # 默认值
    }

    def __init__(self, *args, **kwargs):
        super(testSpider, self).__init__(*args, **kwargs)

        delay = kwargs.get('delay')
        if delay:
            # 转换为数字类型,避免字符串格式的配置不生效
            delay = int(delay)
            # 直接修改settings对象,指定spider级优先级
            self.settings.set('DOWNLOAD_DELAY', delay, priority='spider')
            print('修改后的DOWNLOAD_DELAY:', self.settings.get('DOWNLOAD_DELAY'))

替代方案

如果你不需要对传入的delay参数做额外逻辑处理,也可以直接使用Scrapy原生的配置传递参数,不需要修改爬虫代码:

scrapy crawl test -s DOWNLOAD_DELAY=5

内容的提问来源于stack exchange,提问作者merlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:00:04