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

Scrapy使用CrawlerProcess启动Splash爬虫时代理不生效问题

问题原因
  1. 核心原因是CrawlerProcess默认不会自动读取项目根目录下的settings.py配置,而scrapy crawl命令执行时会自动加载项目的全量配置,包括你配置的scrapy-splash相关中间件、去重规则等。你直接实例化空的CrawlerProcess(),scrapy-splash的组件没有被加载,写在lua脚本里的代理规则和SplashRequest里的proxy参数自然不会生效。
  2. 次要问题是你当前的代理配置冗余,同时在lua脚本的request:set_proxy和SplashRequest的args里传了proxy参数,可能产生优先级冲突。
解决方法

方法1:实例化CrawlerProcess时传入项目配置

导入官方提供的配置加载工具加载项目配置,和scrapy crawl启动效果完全一致:

from scrapy.crawler import CrawlerProcess
# 导入scrapy自带的项目配置加载工具
from scrapy.utils.project import get_project_settings
# 加载当前项目的settings.py全量配置
settings = get_project_settings()
process = CrawlerProcess(settings)
process.crawl(AdsSpiderSpider2)
process.start()

方法2:手动传入必要配置

如果不需要加载整个项目的settings,也可以手动把scrapy-splash相关配置传入:

from scrapy.crawler import CrawlerProcess

process = CrawlerProcess(settings={
    'ROBOTSTXT_OBEY': False,
    'DOWNLOAD_DELAY': 0.5,
    'RANDOMIZE_DOWNLOAD_DELAY': True,
    'DOWNLOADER_MIDDLEWARES': {
        'scrapy_splash.SplashCookiesMiddleware': 723,
        'scrapy_splash.SplashMiddleware': 725,
        'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
    },
    'SPLASH_URL': 'http://localhost:8050',
    'SPIDER_MIDDLEWARES': {
        'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
    },
    'DUPEFILTER_CLASS': 'scrapy_splash.SplashAwareDupeFilter'
})
process.crawl(AdsSpiderSpider2)
process.start()

额外优化建议

冗余的代理配置保留任意一处即可:

  • 保留lua脚本里的request:set_proxy配置,就删掉SplashRequest的args里的proxy参数
  • 或者删除lua里的set_proxy逻辑,只保留SplashRequest里的proxy参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:06:02