Scrapy 是 Python 生态中最主流的爬虫框架,而 Scrapyd 则是官方提供的专门用于部署、运行和管理 Scrapy 爬虫的服务端程序。相比于手动在服务器执行爬虫脚本,通过 Scrapyd 部署能实现爬虫的远程管理、进程守护、任务调度等核心能力,是规模化运行 Scrapy 爬虫的首选方案。本文将从环境准备、服务配置、爬虫打包、部署上线到任务管理,全方位详解如何将 Scrapy 爬虫部署到 Scrapyd 服务端。
一、核心概念与环境准备
1.1 核心概念梳理
- Scrapyd:基于 Twisted 编写的轻量级 HTTP 服务,用于管理 Scrapy 爬虫的生命周期,支持多爬虫、多版本部署,提供 REST API 接口实现远程操作。
- Scrapyd-Client :Scrapyd 配套的客户端工具,提供
scrapyd-deploy命令,用于将本地 Scrapy 项目打包并上传到 Scrapyd 服务端。 - egg 文件:Scrapy 项目打包后的标准格式,包含爬虫代码、依赖及配置,是 Scrapyd 识别和运行爬虫的载体。
1.2 环境要求
- 服务端 / 客户端均需安装 Python 3.6+(推荐 3.8-3.10,兼容性最佳)。
- 服务端需具备公网 IP 或内网可访问地址,开放 Scrapyd 默认端口(6800)。
- 建议使用虚拟环境(venv/conda)隔离依赖,避免环境冲突。
1.3 环境安装
(1)服务端安装 Scrapyd
登录服务器,执行以下命令安装 Scrapyd:
bash
运行
# 升级pip(可选)
pip install --upgrade pip
# 安装Scrapyd
pip install scrapyd
# 验证安装(查看版本)
scrapyd version
(2)客户端安装 Scrapyd-Client
在本地开发机安装客户端工具,用于打包和部署爬虫:
bash
运行
# 安装Scrapyd-Client(注意是scrapyd-client,带短横线)
pip install scrapyd-client
# 验证安装(查看scrapyd-deploy命令是否可用)
scrapyd-deploy -h
二、Scrapyd 服务端配置
2.1 核心配置文件
Scrapyd 的默认配置文件路径为/etc/scrapyd/scrapyd.conf(Linux)或~/.scrapyd.conf(Windows/Mac),若不存在可手动创建。核心配置项如下:
ini
[scrapyd]
# 服务监听地址,0.0.0.0允许所有IP访问
bind_address = 0.0.0.0
# 服务端口,默认6800
http_port = 6800
# 爬虫项目存储目录
projects_dir = /var/scrapyd/projects
# 爬虫日志存储目录
logs_dir = /var/scrapyd/logs
# 爬虫进程PID存储目录
dbs_dir = /var/scrapyd/dbs
# 允许的最大并发爬虫数
max_proc = 10
# 允许的每个项目最大并发数
max_proc_per_project = 5
# 可选:开启认证(推荐生产环境配置)
[auth]
# 格式:用户名:密码
users = admin:123456
2.2 启动 Scrapyd 服务
(1)前台启动(测试用)
bash
运行
scrapyd
启动成功后,访问http://服务器IP:6800可看到 Scrapyd 的默认页面,显示服务状态。
(2)后台启动(生产环境)
推荐使用systemd配置守护进程(以 Linux 为例):
- 创建服务文件:
bash
运行
vim /etc/systemd/system/scrapyd.service
- 写入以下内容:
ini
[Unit]
Description=Scrapyd Service
After=network.target
[Service]
User=root
Group=root
# 指定Scrapyd配置文件路径
ExecStart=/usr/local/bin/scrapyd --config /etc/scrapyd/scrapyd.conf
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
- 启动并设置开机自启:
bash
运行
# 重新加载systemd配置
systemctl daemon-reload
# 启动Scrapyd
systemctl start scrapyd
# 设置开机自启
systemctl enable scrapyd
# 查看服务状态
systemctl status scrapyd
三、Scrapy 爬虫项目改造
本地 Scrapy 项目需做简单配置,才能适配 Scrapyd 部署:
3.1 配置 scrapy.cfg 文件
Scrapy 项目根目录的scrapy.cfg是核心配置文件,修改内容如下:
ini
[settings]
# 指定爬虫项目的settings模块(替换为你的项目名)
default = your_project_name.settings
[deploy:scrapyd_server]
# Scrapyd服务端地址(替换为你的服务器IP)
url = http://服务器IP:6800/
# 项目名称(自定义,需唯一)
project = your_project_name
# 可选:若服务端配置了认证,添加用户名密码
# username = admin
# password = 123456
说明:[deploy:scrapyd_server]中的scrapyd_server是自定义的部署别名,可设置多个(如测试环境、生产环境)。
3.2 检查项目依赖
确保爬虫项目的依赖已明确,推荐在项目根目录创建requirements.txt文件:
txt
# 列出项目所有依赖
Scrapy==2.11.0
pymongo==4.6.0
requests==2.31.0
服务端需提前安装这些依赖:
bash
运行
pip install -r requirements.txt
3.3 验证爬虫本地可运行
部署前先在本地测试爬虫,确保无语法错误和逻辑问题:
bash
运行
# 进入项目根目录
cd your_project_dir
# 运行爬虫(替换为你的爬虫名)
scrapy crawl your_spider_name
四、爬虫打包与部署
4.1 打包并部署到 Scrapyd
在本地项目根目录执行以下命令,一键部署:
bash
运行
# 格式:scrapyd-deploy 部署别名 --version 版本号
scrapyd-deploy scrapyd_server --version 1.0
参数说明:
scrapyd_server:对应scrapy.cfg中配置的部署别名;--version:指定版本号(可选,默认自动生成),用于区分同一项目的不同版本。
部署成功会输出类似日志:
plaintext
Packing version 1.0
Deploying to project "your_project_name" in http://服务器IP:6800/addversion.json
Server response (200):
{"status": "ok", "project": "your_project_name", "version": "1.0", "spiders": 1, "node_name": "server-01"}
4.2 常见部署问题排查
- 连接超时:检查服务端 6800 端口是否开放、防火墙是否放行;
- 认证失败 :确认
scrapy.cfg中的用户名密码与服务端scrapyd.conf一致; - 依赖缺失:服务端安装爬虫所需的所有第三方库;
- 打包失败 :确保项目根目录有
setup.py文件(Scrapy 创建项目时自动生成)。
五、Scrapyd 爬虫管理
部署完成后,可通过 API 或客户端工具管理爬虫:
5.1 核心 API 接口(RESTful)
Scrapyd 提供 HTTP API 实现远程操作,核心接口如下:
| 接口地址 | 请求方法 | 功能 | 示例参数 |
|---|---|---|---|
/listprojects.json |
GET | 列出所有部署的项目 | 无 |
/listspiders.json |
GET | 列出指定项目的爬虫 | project=your_project_name |
/schedule.json |
POST | 启动爬虫 | project=your_project_name&spider=your_spider_name |
/cancel.json |
POST | 终止爬虫 | project=your_project_name&job=job_id |
/listjobs.json |
GET | 列出所有任务状态 | project=your_project_name |
示例:通过 curl 启动爬虫
bash
运行
# 无认证
curl http://服务器IP:6800/schedule.json -d "project=your_project_name&spider=your_spider_name"
# 有认证
curl -u admin:123456 http://服务器IP:6800/schedule.json -d "project=your_project_name&spider=your_spider_name"
5.2 第三方管理工具
- ScrapydWeb :可视化管理面板,支持爬虫启动、停止、日志查看、定时任务等,安装命令:
pip install scrapydweb; - ScrapyRT:轻量级 API 服务,可将爬虫转换为 HTTP 接口调用。
5.3 日志查看
Scrapyd 的爬虫日志默认存储在logs_dir配置的目录下,也可通过以下方式查看:
- 直接访问:
http://服务器IP:6800/logs/项目名/爬虫名/任务ID.log; - 通过 ScrapydWeb 面板在线查看;
- 服务器本地查看:
cat /var/scrapyd/logs/your_project_name/your_spider_name/xxx.log。
六、生产环境优化建议
- 配置认证:务必开启 Scrapyd 的用户名密码认证,避免未授权访问;
- 端口防护:生产环境可将 6800 端口仅对内网开放,或通过 Nginx 反向代理增加一层防护;
- 日志轮转:配置 logrotate 定期清理日志文件,避免磁盘占满;
- 依赖隔离:为每个爬虫项目创建独立的虚拟环境,避免依赖冲突;
- 监控告警:通过 Prometheus+Grafana 监控 Scrapyd 服务状态,或脚本检测爬虫运行状态,异常时触发邮件 / 钉钉告警;
- 版本管理:部署时指定清晰的版本号,便于回滚和问题定位。
总结
- Scrapyd 部署 Scrapy 爬虫的核心流程为:服务端安装配置 Scrapyd → 本地改造爬虫项目配置 → 打包部署 → 远程管理;
- 关键配置文件包括服务端的
scrapyd.conf和客户端的scrapy.cfg,需重点关注地址、端口和认证配置; - 生产环境需做好服务守护、认证防护、日志管理等优化,确保爬虫稳定运行。
通过 Scrapyd 部署 Scrapy 爬虫,可摆脱手动执行脚本的低效模式,实现爬虫的标准化、规模化管理,是企业级爬虫应用的必备方案。