将爬虫部署到服务器:Scrapy+Scrapyd 实现定时任务与监控

在数据采集场景中,很多爬虫需要长期、定时运行(比如每日爬取行业数据、实时监控竞品价格等)。本地运行爬虫不仅受限于设备开机状态,还难以实现自动化管理。本文将介绍如何通过 Scrapy (爬虫框架)+ Scrapyd(爬虫部署工具)将爬虫部署到服务器,并实现定时任务与运行监控,让爬虫真正 "无人值守"。

一、核心工具简介

在开始前,先明确几个核心工具的作用:

  • Scrapy:Python 生态中成熟的爬虫框架,用于快速开发高性能爬虫,支持自定义解析逻辑、数据存储、反爬策略等。
  • Scrapyd:一款用于部署和管理 Scrapy 爬虫的工具,提供 HTTP 接口用于远程部署、启动、停止爬虫,并支持查看爬虫运行状态和日志。
  • Scrapyd-Client:本地用于与 Scrapyd 交互的工具,帮助将本地 Scrapy 项目打包并部署到远程 Scrapyd 服务。
  • 定时任务工具 :如 Linux 自带的crontab或可视化工具SpiderKeeper,用于实现爬虫定时运行。
  • 监控工具 :Scrapyd 自带的 Web 界面、SpiderKeeperPrometheus+Grafana,用于监控爬虫运行状态。

二、环境准备

2.1 服务器选择与基础配置

推荐使用云服务器(如阿里云 ECS、腾讯云 CVM),系统选择 Linux(本文以 Ubuntu 20.04 为例)。配置步骤:

  1. 服务器初始化:更新系统依赖

    bash

    复制代码
    sudo apt update && sudo apt upgrade -y
  2. 安装 Python 环境(建议 Python 3.8+)

    bash

    复制代码
    sudo apt install python3 python3-pip python3-venv -y
  3. 配置防火墙:开放 Scrapyd 默认端口(8000)和 SSH 端口(22)

    bash

    复制代码
    sudo ufw allow 22/tcp   # 允许SSH连接
    sudo ufw allow 8000/tcp # 允许Scrapyd访问
    sudo ufw enable         # 启用防火墙

2.2 安装核心工具

在服务器上创建虚拟环境并安装依赖:

bash

复制代码
# 创建虚拟环境
python3 -m venv scrapy-env
source scrapy-env/bin/activate  # 激活环境(Windows用 scrapy-env\Scripts\activate)

# 安装Scrapy、Scrapyd、Scrapyd-Client
pip install scrapy scrapyd scrapyd-client
  • 验证安装:运行scrapyd --versionscrapy --version,若输出版本信息则安装成功。

三、Scrapy 项目准备

假设你已有一个可正常运行的 Scrapy 项目(若没有,可先用scrapy startproject demo创建测试项目)。需确保:

  1. 项目在本地可正常运行(scrapy crawl 爬虫名无报错)。

  2. 数据存储配置正确(如 MySQL、MongoDB 或本地文件,若用数据库需确保服务器能访问)。

  3. settings.py中关闭调试模式(避免日志冗余):

    python

    运行

    复制代码
    LOG_LEVEL = 'INFO'  # 只输出INFO及以上级别日志
    ROBOTSTXT_OBEY = False  # 根据需求决定是否遵守robots协议

四、部署 Scrapy 项目到 Scrapyd

4.1 配置 Scrapyd 服务

Scrapyd 默认配置即可启动,但需修改绑定地址以允许远程访问:

  1. 找到 Scrapyd 配置文件(默认路径:/etc/scrapyd/scrapyd.conf,若不存在则在虚拟环境site-packages/scrapyd/default_scrapyd.conf复制)。

  2. 修改配置:

    ini

    复制代码
    [scrapyd]
    bind_address = 0.0.0.0  # 允许所有IP访问(仅服务器内访问可设为127.0.0.1)
    http_port = 8000        # 端口(保持默认即可)
  3. 启动 Scrapyd 服务:

    bash

    复制代码
    scrapyd  # 前台启动(测试用)
    # 后台启动(生产用):
    nohup scrapyd > scrapyd.log 2>&1 &
  4. 验证服务:浏览器访问http://服务器IP:8000,若显示 Scrapyd 管理界面则启动成功。

4.2 部署本地项目到 Scrapyd

使用scrapyd-client工具将本地 Scrapy 项目部署到服务器:

  1. 本地项目根目录(含scrapy.cfg)中,修改scrapy.cfg

    ini

    复制代码
    [deploy:服务器名称]  # 自定义名称(如my_server)
    url = http://服务器IP:8000/  # 服务器Scrapyd地址
    project = 项目名  # 与Scrapy项目名一致(如demo)
  2. 部署项目:在本地终端(需安装scrapyd-client)执行:

    bash

    复制代码
    scrapyd-deploy 服务器名称 -p 项目名

    若出现Deployed zippackage提示,说明部署成功。此时在服务器 Scrapyd 界面的 "Projects" 中可看到部署的项目。

五、实现定时任务

Scrapyd 本身不支持定时,需结合外部工具实现。推荐两种方案:

5.1 方案 1:Linux crontab(轻量简单)

通过crontab定时调用 Scrapyd 的 HTTP 接口启动爬虫。

  1. 编写启动脚本(start_spider.sh):

    bash

    复制代码
    #!/bin/bash
    # 调用Scrapyd的/schedule.json接口启动爬虫
    curl http://服务器IP:8000/schedule.json -d "project=项目名&spider=爬虫名"

    给脚本添加执行权限:

    bash

    复制代码
    chmod +x start_spider.sh
  2. 配置定时任务:运行crontab -e,添加如下内容(每天凌晨 2 点执行):

    bash

    复制代码
    0 2 * * * /path/to/start_spider.sh  # 脚本绝对路径

    保存后,crontab会自动生效。可通过crontab -l查看已配置的任务。

5.2 方案 2:SpiderKeeper(可视化管理)

SpiderKeeper是基于 Web 的 Scrapyd 管理工具,支持可视化配置定时任务,适合非命令行用户。

  1. 安装 SpiderKeeper:

    bash

    复制代码
    pip install spiderkeeper
  2. 启动 SpiderKeeper(连接到 Scrapyd 服务):

    bash

    复制代码
    spiderkeeper --server=http://服务器IP:8000  # 连接到Scrapyd
  3. 访问http://服务器IP:5000(默认端口),通过 Web 界面:

    • 在 "Spider" 中选择爬虫,点击 "Schedule" 配置定时规则(支持 Cron 表达式)。
    • 可直接查看爬虫运行状态、历史记录和日志。

六、监控爬虫运行状态

实时监控爬虫状态是确保数据稳定采集的关键,推荐以下方式:

6.1 Scrapyd 自带监控

Scrapyd 的 Web 界面(http://服务器IP:8000)提供基础监控功能:

  • Jobs:查看正在运行、已完成或失败的爬虫任务。
  • Logs:查看爬虫实时日志(点击任务 ID 即可查看)。
  • Projects:管理已部署的项目版本。

6.2 SpiderKeeper 增强监控

SpiderKeeper在 Scrapyd 基础上增加了更友好的可视化监控:

  • 爬虫运行趋势图(成功 / 失败次数统计)。
  • 定时任务执行记录。
  • 日志搜索与筛选。

6.3 高级监控:Prometheus+Grafana

若需更全面的监控(如服务器资源占用、爬虫性能指标),可结合:

  1. Prometheus :采集 Scrapyd 和服务器的指标(需安装prometheus-client暴露接口)。
  2. Grafana:可视化指标,配置告警(如爬虫失败时发送邮件)。

步骤可参考:

  • 安装 Prometheus 并配置 Scrapyd 指标采集。
  • 安装 Grafana,导入 Prometheus 数据源,配置监控面板。

七、注意事项

  1. 日志管理 :爬虫日志会占用磁盘空间,建议通过logrotate定期清理(配置/etc/logrotate.d/scrapyd)。
  2. 反爬与 IP 代理 :服务器固定 IP 易被目标网站封禁,可结合代理池(如proxy_pool)动态切换 IP。
  3. 高可用:若爬虫任务关键,可部署多台 Scrapyd 服务器,通过负载均衡避免单点故障。
  4. 安全加固
    • 限制 Scrapyd 端口访问(仅允许信任 IP)。
    • 给 Scrapyd 添加认证(如用nginx反向代理 + Basic Auth)。

八、总结

通过 Scrapy+Scrapyd 的组合,我们可以轻松将爬虫部署到服务器,并通过crontabSpiderKeeper实现定时任务,再配合监控工具确保爬虫稳定运行。这套方案兼顾了灵活性和易用性,适合从个人项目到企业级数据采集场景的需求。

掌握后,你可以将更多精力放在爬虫逻辑优化上,让数据采集真正实现 "自动化、无人化"。

相关推荐
熊思宇7 小时前
ASP.NET Core Web API 发布到 IIS 服务器
服务器·microsoft·asp.net
搬砖的青蛙7 小时前
本地web测试服务器快速域名映射工具
服务器·域名映射·ip映射
nightunderblackcat8 小时前
四大名著智能可视化推演平台
前端·网络·爬虫·python·状态模式
sailwon8 小时前
自己搭建远程桌面服务器——私有化部署RustDesk
运维·服务器·云计算·远程工作
Garc8 小时前
Zookeeper删除提供者服务中的指定IP节点
linux·运维·服务器
数据牧羊人的成长笔记12 小时前
python爬虫scrapy框架使用
爬虫·python·scrapy
SUPER526615 小时前
FastApi项目启动失败 got an unexpected keyword argument ‘loop_factory‘
java·服务器·前端
一只小bit15 小时前
MySQL 库的操作:从创建配置到备份恢复
服务器·数据库·mysql·oracle
利刃大大16 小时前
【高并发服务器】二、时间轮定时器设计与实现
服务器·项目·cpp·高并发服务器