type
Post
status
Published
date
Dec 30, 2020 22:43
slug
summary
本文系统讲解如何将 Scrapy 爬虫从本地脚本升级为生产级服务:从单机到集群的 3 种部署方案选型,Scrapyd 后端服务的安装、配置与项目发布流程,完整的 HTTP API 调度速查表(schedule/listjobs/cancel),Nginx 反向代理 + 鉴权的安全加固方案,ScrapydWeb 多节点可视化管理台搭建,以及「远程调用」与「爬虫即服务」两个工程化落地场景,帮你把爬虫能力快速开放给数据平台、定时任务与运营后台。
tags
Python
Crawler
Scrapy
category
Crawler
icon
password
wordCount
1752
Scrapy 上云:用 Scrapyd 把爬虫变成“可部署、可调度”的服务
目标:把 Scrapy 项目发布到 Scrapyd,并通过远程 HTTP API 实现启动、追踪、取消任务。进一步用 Web 控制台(ScrapydWeb)做集群管理与监控。
组件速览
- Scrapy:爬虫框架(写 Spider 的地方)。
- Scrapyd(后端服务):运行与调度服务(部署项目、调度任务、记录日志)。
- scrapyd-client(发布工具):把本地项目打包上传到 Scrapyd。
- ScrapydWeb(管理台):聚合多台 Scrapyd,提供可视化部署、运行、监控、告警能力。https://developer.volcengine.com/articles/7383092979508412443
一句话理解:Scrapyd 是后端,提供“爬虫运行 + API 调度”;ScrapydWeb 是管理台,把多台 Scrapyd 聚合成可操作的 Web 控制台。
部署方案(从轻量到生产)
下面给 3 种常见部署路线,你可以按团队规模与安全要求选择。
方案 1:本机 / 单机快速验证(最轻)
- 适合:个人开发、功能验证
- 特点:最快跑通,但不建议长期开着
- 关键做法:直接
pip install scrapyd+scrapyd启动
方案 2:单台 Linux 服务器常驻(推荐起步)
- 适合:小团队、内部服务
- 特点:稳定、成本低、维护简单
- 建议组合:
- Scrapyd 作为 systemd 服务常驻
- Nginx 反向代理
/到127.0.0.1:6800 - 用 Basic Auth 或内网访问控制
如果要给“后台/数据平台”远程调用,请务必做访问控制:
- 只开放内网
- 或 Nginx + 鉴权
- 或在安全组层面限制来源 IP
方案 3:容器化部署(Docker)
- 适合:已有容器平台、希望一致性部署
- 特点:环境可复现,便于迁移
- 建议组合:
- 一个容器跑 Scrapyd
- 用挂载卷保存 logs(避免容器重建丢日志)
- 仍然建议 Nginx 作为入口做鉴权
一个可落地的“生产最小形态”
- Scrapyd:内网监听 6800
- Nginx:对外提供入口 + 鉴权
- 调度方:定时任务 / 后台服务(调用 schedule/listjobs/cancel)
- 观测:把 jobid 落库,结合日志与告警
后端服务(Backend):Scrapyd 部署与 API 调度
1. 安装并启动 Scrapyd
1)安装
2)启动服务
3)打开 Scrapyd 自带管理页面(本地验证)
浏览器访问:http://127.0.0.1:6800/
启动 Scrapyd 的命令行窗口先不要关闭。后续部署与调度都依赖它。

2. 部署 Scrapy 项目(scrapyd-client)
1)安装 scrapyd-client
2)验证安装
Windows 下 “不是内部或外部命令” 的处理
如果运行
scrapyd-deploy 提示不是内部或外部命令:- 找到你的 python 环境目录(如 Anaconda env)
- 创建一个
scrapyd-deploy.bat(确保所在目录在 PATH 中)
关闭并重新打开命令行,再次执行
scrapyd-deploy。3)配置 scrapy.cfg
进入 Scrapy 项目根目录,编辑
scrapy.cfg:local:部署目标名,可自定义。
project:Scrapyd 侧的项目名。
部署到远程服务器时,只要把
url 换成:http://YOUR_SERVER:6800/。4)部署
确保 Scrapyd 正在运行,然后执行:

3. 验证服务可用
正常响应示例:
Windows 常见错误:缺 pywin32
报错:
修复:
4. Scrapyd API 速查(常用)
目的 | 接口 | 示例 |
查看节点状态 | /daemonstatus.json | |
调度运行(创建 job) | /schedule.json | curl http://localhost:6800/schedule.json -d project=myproject -d spider=somespider |
取消运行 | /cancel.json | curl http://localhost:6800/cancel.json -d project=myproject -d job=JOB_ID |
列出 jobs(pending/running/finished) | /listjobs.json | |
列出 spiders | /listspiders.json | |
列出项目 | /listprojects.json |
安全提醒(强烈建议):不要把 Scrapyd 直接暴露到公网。至少加一层 Nginx 反代 + Basic Auth 或内网访问。
管理台(Console):Web UI / ScrapydWeb
1. Scrapyd 自带 Web UI(配域名 + 鉴权)
Scrapyd 自带 Web UI 很适合做“最小爬虫管理台”,但默认直接暴露
:6800 并不安全。推荐:- Scrapyd 只在 内网/本机 监听(例如
127.0.0.1:6800)
- 用 Nginx 反向代理 对外提供统一入口(例如
https://spider.your-domain.com)
- 用 Basic Auth 或内网访问控制,把 UI 与 API 一起保护起来
1)生成密码文件
2)Nginx 配置示例
3)重载 Nginx

2. ScrapydWeb:一套 UI 管理多台 Scrapyd(部署 + 监控 + 批量操作)
ScrapydWeb 能够:
- 通过分组和过滤选择若干台 Scrapyd server
- 调用 Scrapyd 的 JSON API,实现“一次操作,批量执行”
- 定时读取并分析日志,做统计与可视化
- 触发邮件通知(可选)
(参考:ScrapydWeb 的部署与监控思路)https://developer.volcengine.com/articles/7383092979508412443
1)让 Scrapyd 支持远程访问(集群必备)
在每台 Scrapyd 服务器上:
- 将
bind_address改为0.0.0.0
- 重启 scrapyd
把
bind_address = 0.0.0.0 之后更要做安全组 / 防火墙限制,避免公网可达。2)安装并生成配置
会生成配置文件
scrapydweb_settings.py。3)开启登录认证(可选但推荐)
4)添加多台 Scrapyd Server(支持分组/标签)
5)启动并访问

应用实践(Use Cases):远程调用与工程化
场景 A:运营后台一键“远程启动爬虫”
1)远程启动 Spider(curl)
返回示例:
2)查询运行状态(listjobs)
3)需要时取消任务(cancel)
关键点:
schedule.json 返回的 jobid 是追踪一次抓取的唯一凭证。建议落库。场景 B:把 Scrapyd 封装成“爬虫即服务”(Python 请求示例)
工程化建议:
- 把
jobid写入数据库(或队列消息),便于对账、重跑、告警
- 给每次 schedule 增加
trace_id(自定义参数),把日志与数据血缘串起来
- 大量任务需要限流与队列,避免 Scrapyd 被瞬时打爆
结尾
Scrapyd 的价值不在于“能跑 Scrapy”,而在于把爬虫变成可发布、可远程触发、可追踪的服务能力。
你可以从“单机 + curl 调度”开始,逐步升级到:
- 多机集群(多台 Scrapyd)
- 管理台统一控制(ScrapydWeb)
- 日志分析与告警
- 数据平台集成(触发、回补、对账)
参考
- ScrapydWeb 思路与配置示例:https://developer.volcengine.com/articles/7383092979508412443
.jpg?table=block&id=30052c4c-a1ae-815f-b01c-c0c0bd7109b8&t=30052c4c-a1ae-815f-b01c-c0c0bd7109b8)