将爬虫部署到服务器: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实现定时任务,再配合监控工具确保爬虫稳定运行。这套方案兼顾了灵活性和易用性,适合从个人项目到企业级数据采集场景的需求。

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

相关推荐
李子红了时2 小时前
【墨铺网教程】一台电脑加入多个局域网,让电脑做上传下载主力又当存储盘
运维·服务器·电脑
孤狼warrior4 小时前
爬虫进阶 JS逆向基础超详细,解锁加密数据
javascript·爬虫
Awkwardx4 小时前
Linux系统编程—线程同步与互斥
linux·服务器
www.026 小时前
linux服务器升级显卡驱动(笔记)
linux·运维·服务器·笔记·ubuntu·服务器环境
Linux-palpitate6 小时前
基于Prometheus和Grafana的MySQL监控,服务器监控
服务器·grafana·prometheus
BD_Marathon7 小时前
【Linux】awk命令
linux·运维·服务器
前端世界7 小时前
Linux 防火墙实战:用 firewalld 配置 External/Internal 区域,实现 NAT 内网共享上网
linux·服务器·网络
在坚持一下我可没意见9 小时前
Java 网络编程:TCP 与 UDP 的「通信江湖」(基于UDP回显服务器)
java·服务器·开发语言·tcp/ip·udp·java-ee
球求了10 小时前
Linux 系统入门:环境变量&&虚拟地址空间
linux·运维·服务器·1024程序员节