Scrapy 爬虫服务化实战:Scrapyd 部署、API 调度与 ScrapydWeb 集群监控

Words 1495Read Time 4 min
2026-2-11
cover
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 项目
  • 希望在服务器上统一调度与管理爬虫
  • 想把“抓取”能力开放给其它系统(后台、定时任务、数据平台)

你会得到什么

  • 一套可复用的服务端部署流程(Scrapyd)
  • 一份 API 速查表(复制即可用)
  • 一套管理台方案(Scrapyd UI / ScrapydWeb)
  • 2 个真实应用场景:远程启动与“爬虫即服务”封装

组件速览

  • Scrapy:爬虫框架(写 Spider 的地方)。
  • Scrapyd(后端服务):运行与调度服务(部署项目、调度任务、记录日志)。
  • scrapyd-client(发布工具):把本地项目打包上传到 Scrapyd。
💡
一句话理解: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
  • 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)启动并访问

notion image

应用实践(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)
  • 日志分析与告警
  • 数据平台集成(触发、回补、对账)

参考

Loading...