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

如何向scrapyd-client传递Scrapy命令行参数以调度带参数的爬虫

我之前刚好解决过这个问题!Scrapy直接运行时的-a、-o这类参数没法直接照搬给scrapyd-client,得按照scrapyd的API规则来传递,分两种情况给你说清楚:

1. 传递爬虫命令行参数(-a 参数)

Scrapy里的-a key=value是用来给爬虫实例传递初始化参数的,在scrapyd-client中,你可以直接用-a参数来传递,和Scrapy命令行的用法几乎一致,或者通过scrapyd的REST API直接把参数作为POST表单字段提交。

示例(用scrapyd-client命令)

对应你原来的-a person="John" -a location="porto",调度命令应该是:

scrapyd schedule -p 你的项目名称 spider_name -a person="John" -a location="porto"

示例(用scrapyd REST API)

如果直接调用scrapyd的schedule.json接口,把参数作为POST数据传递即可:

curl http://localhost:6800/schedule.json \
  -d project=你的项目名称 \
  -d spider=spider_name \
  -d person="John" \
  -d location="porto"

scrapyd会自动把这些额外的参数传递给爬虫,效果和Scrapy命令行的-a完全一致。

2. 处理输出文件参数(-o 参数)

这里要注意:Scrapy的-o是客户端本地输出的参数,但scrapyd是在服务端运行爬虫的,所以直接用-o不会在你的本地生成文件,而是会在scrapyd服务器的文件系统里生成。如果要实现类似的输出效果,推荐用Scrapy的FEEDS配置来替代:

示例(用scrapyd-client配置FEEDS)

对应你原来的-o local.csv,可以通过-s参数传递FEEDS设置:

scrapyd schedule -p 你的项目名称 spider_name \
  -a person="John" -a location="porto" \
  -s FEEDS='{"local.csv": {"format": "csv"}}'

这样爬虫运行时,会在scrapyd服务器的当前工作目录下生成local.csv文件。

示例(用scrapyd REST API配置FEEDS)

同样通过POST参数传递settings:

curl http://localhost:6800/schedule.json \
  -d project=你的项目名称 \
  -d spider=spider_name \
  -d person="John" \
  -d location="porto" \
  -d settings='{"FEEDS": {"local.csv": {"format": "csv"}}}'

额外提示

如果需要把输出文件拿到本地,有两种思路:

  • 直接登录scrapyd服务器获取生成的文件;
  • 修改爬虫逻辑,把输出数据发送到外部存储(比如云存储、数据库),再从本地读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:52:02