爬虫定时怎么跑?

wen 实用脚本 45

本文目录导读:

爬虫定时怎么跑?

  1. 方案一:操作系统的自带任务计划(最简单,无需装软件)
  2. 方案二:使用 Python 的 schedule 库(代码内控制,适合常驻进程)
  3. 方案三:专业的分布式调度框架(最可靠,适合生产环境)
  4. 新手常见坑(避坑指南)
  5. 总结建议

爬虫定时运行通常有三种主流方式,具体选择取决于你的环境(本地电脑 vs. 服务器)和爬虫脚本的类型(Python、Node.js 等)。

以下是几种最常用的方案,从简单到专业:

操作系统的自带任务计划(最简单,无需装软件)

适合本地电脑个人服务器,脚本写好后,让系统定时调用。

Windows:使用“任务计划程序”

  1. 打开“任务计划程序”(搜索即可找到)。
  2. 右侧点击“创建基本任务”。
  3. 触发器:设置每天/每小时/每周的具体时间。
  4. 操作
    • 程序或脚本:选择你的 Python 解释器路径(C:\Python39\python.exe)。
    • 添加参数:填写你的爬虫脚本路径(D:\spiders\my_spider.py)。
  5. 完成,电脑需要保持开机(可以设置“睡眠”时运行)。

Linux / Mac:使用 Crontab(最经典、最稳定)

这是服务器端最常用的方式,只需编辑一个配置文件。

# 1. 打开 crontab 编辑界面
crontab -e
# 2. 写入定时规则(每 5 分钟执行一次爬虫,并将日志输出到 log.txt)
*/5 * * * * /usr/bin/python3 /home/user/spider.py >> /home/user/spider.log 2>&1
# 3. 保存退出即可生效

Crontab 时间格式说明(5 个星号):

* * * * * 命令
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ └── 星期几 (0-7, 0或7是周日)
│ │ │ └──── 月份 (1-12)
│ │ └────── 日期 (1-31)
│ └──────── 小时 (0-23)
└───────── 分钟 (0-59)

常用示例:

  • 每天凌晨 2 点:0 2 * * * 命令
  • 每小时整点:0 * * * * 命令
  • 每 30 分钟:*/30 * * * * 命令

使用 Python 的 schedule 库(代码内控制,适合常驻进程)

如果你希望爬虫持续运行,在脚本内部就控制间隔,可以使用这个库,但注意:它不能跨天(每天10点”),且进程不能中断。

import schedule
import time
def my_spider():
    print("爬虫正在运行...")
    # 这里放你的爬虫代码
# 设置定时任务
schedule.every(10).minutes.do(my_spider)   # 每 10 分钟
schedule.every().hour.do(my_spider)        # 每小时
schedule.every().day.at("10:30").do(my_spider)  # 每天 10:30
print("爬虫调度器已启动,按 Ctrl+C 停止...")
while True:
    schedule.run_pending()  # 运行所有到期的任务
    time.sleep(1)           # 等待 1 秒,避免 CPU 空转

缺点: 一旦脚本被关闭,调度就停了,通常配合 nohup(Linux)或 pm2(Node.js)在后台跑。


专业的分布式调度框架(最可靠,适合生产环境)

如果你有很多爬虫,或者需要管理几千个任务,推荐使用下面的框架。

Apache Airflow(推荐,企业级)

  • 原理: 通过 DAG(有向无环图)定义爬虫任务。
  • 优点: 失败自动重试、日志管理、依赖管理、可视化 UI。
  • 适合: 大型、复杂的爬虫管道(如:每隔1小时爬A网站 -> 清洗数据 -> 存入数据库 -> 发邮件)。

Celery + Flower(Python 生态)

  • 原理: 把爬虫任务做成 Celery 任务,用定时器(Celery Beat)发送到队列中执行。
  • 优点: 解耦、任务队列、可分布式执行(多台机器同时跑)。
  • 适合: 高并发、需要横向扩展的爬虫。

Scrapyd + Crontab(Scrapy 专用)

  • 如果你用 Scrapy 框架,可以部署到 Scrapyd 服务,然后用一个简单的脚本调用 Scrapyd API,再通过 Crontab 定时调用这个脚本。

新手常见坑(避坑指南)

  1. 路径问题:

    • 定时任务运行时的“当前工作目录”往往不是你脚本所在的目录。
    • 解决: 在脚本开头写上 import os; os.chdir("你的爬虫目录")
  2. 环境变量问题:

    • Crontab 或任务计划程序启动时,无法读取你 .bashrc 或系统 PATH
    • 解决: 在 Crontab 中写绝对路径(如 /usr/bin/python3),或者在脚本前加上 source ~/.bashrc
  3. 日志丢失:

    • 爬虫跑失败了,没有输出任何信息。
    • 解决: 将标准输出和错误输出都重定向到一个文件,如 >> spider.log 2>&1
  4. 重复执行:

    • 如果爬虫跑得慢(比如需要 10 分钟),而定时任务设置的是 5 分钟一次,下一次启动时上一次还没跑完。
    • 解决: 使用文件锁(flock)或数据库锁,防止重复运行。
# Linux 下使用 flock 防止重复运行(独占锁)
* * * * * flock -n /tmp/spider.lock /usr/bin/python3 /path/spider.py >> log.txt

总结建议

场景 推荐方案
个人电脑测试 Windows 任务计划 / Mac Linux 的 crontab
一台云服务器,一个爬虫 crontab(最简单)+ flock(防冲突)
爬虫需要持续运行,间隔固定 Python schedule 库 + nohup / supervisor
多任务、需管理、需监控 Apache AirflowCelery

对于绝大多数个人爬虫项目,先试试 Crontab(Linux/Mac)或 Windows 任务计划程序,足够用了。

抱歉,评论功能暂时关闭!