欢迎光临
我们一直在努力

Python Scrapy 爬虫实战进阶系列(五):项目打包与一键启动脚本 实现全环境快速部署

前言

Scrapy 爬虫完成功能开发、逻辑调试、容错优化后,最终需要落地至服务器、办公主机、多节点集群等不同环境运行。原生 Scrapy 依赖命令行手动执行启动指令,在多设备迁移、批量部署、无人值守运行场景下存在操作繁琐、依赖缺失、启动流程不统一等问题。同时常规 Python 项目直接拷贝源码的部署方式,易出现环境版本不一致、模块导入异常、权限不足等线上故障。

结合前文已完成的模块化架构、自动重试中间件、SQLite 数据入库、多栏目适配能力,本文聚焦Scrapy 项目打包、启动脚本封装、环境依赖统一管理、跨平台部署全流程。通过批处理脚本、Python 启动器、项目打包、依赖固化等技术,实现一键启动、一键环境初始化、免命令行操作的部署方案,同时区分 Windows 与 Linux 运行环境,讲解线上服务常驻、后台运行、日志重定向等运维配套能力,适配个人使用、企业批量部署、服务器长期运维等各类场景。

本文涉及核心工具与官方资源:

  • Scrapy 部署文档:框架官方部署规范与命令说明
  • Python setuptools 打包文档:Python 项目标准打包工具
  • pip freeze 依赖管理:依赖版本固化与批量安装
  • Windows 批处理语法:bat 脚本编写规范
  • 一、部署场景分析与整体方案规划

    1.1 主流部署场景梳理

    结合爬虫项目落地经验,归纳四类典型部署场景,不同场景对应差异化打包与启动方案:

    表格

    部署场景运行环境核心痛点适配方案
    本地单机使用 Windows 个人电脑 每次启动需打开终端、输入命令,操作繁琐 编写 bat 一键启动脚本,图形化双击运行
    小型局域网分发 多台 Windows 主机 环境不一致、依赖逐个安装效率低 固化依赖清单 + 一键安装依赖脚本
    云服务器部署 Linux CentOS/Ubuntu 需要后台常驻、开机自启、日志持久化 Shell 脚本 + 后台进程运行 + 日志重定向
    生产集群部署 多 Linux 节点 项目版本统一、批量更新、统一启停 标准源码打包 + 统一部署脚本 + 版本管控

    1.2 现有项目部署现存问题

    基于前文模块化 Scrapy 项目,原生部署方式存在五大典型问题:

  • 操作门槛高:必须进入项目目录、调用scrapy crawl命令,非技术人员无法操作;
  • 依赖碎片化:目标主机未安装 Scrapy 及相关依赖,逐个安装耗时且版本不统一;
  • 运行窗口依赖:Windows 终端、Linux 终端关闭后,爬虫进程直接终止,无法后台常驻;
  • 日志散乱:默认日志直接输出至终端,无法长期留存,故障排查无历史日志;
  • 迁移繁琐:完整项目包含多级目录、配置文件、数据库文件,手动拷贝易遗漏文件。
  • 1.3 整体技术方案架构

    本次部署优化分为四大模块,逐层解决上述问题,方案全程基于现有模块化架构,不改动原有业务代码:

  • 依赖固化:通过pip freeze生成完整依赖清单,实现批量一键安装;
  • 启动脚本封装:分平台编写启动脚本,屏蔽原生命令行,实现双击 / 单指令启动;
  • 项目标准化打包:使用 Python 标准打包工具,生成可分发安装包,保证目录结构完整;
  • 运维增强:实现后台运行、日志文件持久化、进程守护、异常重启等线上能力。
  • 1.4 前置检查项

    部署优化前,对现有项目做完整性校验,保证打包后功能正常:

  • 项目根目录requirements.txt已存在,记录基础依赖;
  • 所有配置、硬编码参数均迁移至config目录,无本地绝对路径;
  • 数据库文件、日志文件使用相对路径,适配任意部署目录;
  • 全功能测试通过:多栏目采集、数据入库、请求重试中间件正常工作。
  • 二、第一步:依赖版本固化与批量安装方案

    依赖统一是跨环境部署的基础,避免因库版本差异导致的运行报错。本节完成依赖导出、批量安装脚本编写,适配 Windows 与 Linux 双平台。

    2.1 生成精准依赖清单

    在开发完成、功能正常的主机上,打开终端进入项目根目录,执行依赖导出命令,捕获当前环境所有已安装包及版本:

    bash

    运行

    # 导出当前环境全部依赖至 requirements.txt
    pip freeze > requirements.txt

    执行完成后,根目录requirements.txt会补充完整版本信息,示例内容如下:

    txt

    scrapy==2.11.0
    lxml==5.2.1
    Twisted==24.3.0
    cryptography==42.0.8
    itemadapter==0.8.0
    protego==0.3.1
    pyOpenSSL==24.1.0
    queuelib==1.7.0
    service-identity==24.1.0
    w3lib==2.2.1

    该文件包含运行项目所需的全部第三方库及精确版本,目标主机可基于此文件一键还原环境。

    2.2 批量安装依赖脚本

    2.2.1 Windows 依赖安装脚本(install_dep.bat)

    在项目根目录新建install_dep.bat批处理文件,实现一键检测 Python、批量安装依赖,代码如下:

    bat

    @echo off
    chcp 65001
    echo ==================== 开始安装项目依赖 ====================
    echo 正在检测Python环境…

    python –version
    if %errorlevel% neq 0 (
    echo 错误:未检测到Python环境,请先安装Python 3.8及以上版本!
    pause
    exit
    )

    echo 开始批量安装依赖包…
    pip install -r requirements.txt

    echo ==================== 依赖安装完成 ====================
    pause

    脚本原理:先检测 Python 是否存在,再读取requirements.txt批量安装所有依赖,chcp 65001解决 Windows 终端中文乱码问题。

    2.2.2 Linux 依赖安装脚本(install_dep.sh)

    项目根目录新建install_dep.sh脚本,适配 CentOS、Ubuntu 等主流 Linux 发行版:

    shell

    #!/bin/bash
    echo "==================== 开始安装项目依赖 ===================="
    python3 –version
    if [ $? -ne 0 ]; then
    echo "错误:未检测到Python3环境,请先完成安装!"
    exit 1
    fi

    pip3 install -r requirements.txt
    echo "==================== 依赖安装完成 ===================="

    赋予脚本执行权限并运行:

    bash

    运行

    chmod +x install_dep.sh
    ./install_dep.sh

    三、第二步:分平台一键启动脚本开发

    原生scrapy crawl 爬虫名命令被封装至脚本内部,用户仅需双击脚本或执行脚本指令即可启动爬虫,同时增加日志重定向、运行提示、异常捕获功能。当前项目爬虫名称为book_spider,所有启动脚本以此为基准编写。

    3.1 Windows 平台启动方案

    Windows 分为前台运行版(适合本地调试)与后台静默版(适合长期运行),同时配套日志持久化功能。

    3.1.1 前台启动脚本(start.bat 推荐日常使用)

    项目根目录新建start.bat,实现一键启动、日志输出至终端 + 本地日志文件,代码如下:

    bat

    @echo off
    chcp 65001
    echo ==================== Scrapy 图书爬虫 一键启动 ====================
    echo 启动时间:%date% %time%
    echo 日志将同步输出至 logs/spider.log
    echo ======================================================

    :: 创建日志目录(不存在则新建)
    if not exist "logs" mkdir logs

    :: 启动爬虫,日志重定向至日志文件
    scrapy crawl book_spider >> logs/spider.log 2>&1

    echo 爬虫运行结束
    pause

    核心代码解析:

  • if not exist "logs" mkdir logs:自动创建日志目录,避免目录不存在导致日志写入失败;
  • >> logs/spider.log 2>&1:标准输出、错误输出全部重定向至spider.log文件,实现日志持久化;
  • 运行后终端保持打开,可实时查看运行状态,关闭终端即停止爬虫。
  • 3.1.2 后台静默启动脚本(start_silent.bat 适合长期挂机)

    Windows 下使用wscript调用 VBS 脚本实现无窗口后台运行,分为两个文件配合使用。

    第一个文件:start_silent.vbs(后台调用载体)

    vbscript

    Set ws = CreateObject("Wscript.Shell")
    ws.run "cmd /c start.bat",0

    第二个文件:start_silent.bat(入口脚本)

    bat

    @echo off
    echo 爬虫已转入后台静默运行,无前台窗口
    echo 如需停止进程,请在任务管理器结束 python 进程
    echo 日志文件位置:logs/spider.log
    wscript start_silent.vbs
    exit

    使用方式:双击start_silent.bat,前台窗口瞬间关闭,爬虫在后台持续运行,不占用桌面窗口;可通过日志文件查看运行状态。

    3.1.3 停止爬虫脚本(stop.bat)

    针对 Windows 后台运行场景,新增一键停止脚本,批量结束爬虫相关 Python 进程:

    bat

    @echo off
    chcp 65001
    echo 正在终止所有爬虫进程…
    taskkill /f /im python.exe /t
    echo 进程已全部终止
    pause

    注意:该脚本会结束本机所有 Python 进程,若主机同时运行其他 Python 程序,建议通过任务管理器精准结束对应进程。

    3.2 Linux 平台启动方案

    Linux 服务器以后台常驻运行为核心需求,支持会话断开不终止进程、日志持久化、简单进程守护,分为基础版与进阶守护版。

    3.2.1 基础后台启动脚本(start.sh)

    项目根目录新建start.sh,使用nohup实现后台运行、断开 SSH 会话不退出:

    shell

    #!/bin/bash
    echo "==================== Scrapy 爬虫 Linux 启动脚本 ===================="
    # 创建日志目录
    mkdir -p logs
    # nohup 后台运行,& 放入后台,日志重定向
    nohup scrapy crawl book_spider > logs/spider.log 2>&1 &
    # 输出进程PID,方便后续终止进程
    echo "爬虫启动成功,进程PID:$!"
    echo "日志文件路径:./logs/spider.log"
    echo "停止命令:kill -9 进程PID"

    赋予权限并启动:

    bash

    运行

    chmod +x start.sh
    ./start.sh

    核心原理:

  • nohup:忽略挂断信号,SSH 远程连接断开后,进程继续运行;
  • &:将任务放入后台执行;
  • $!:获取最新启动进程的 PID,用于后续精准停止服务。
  • 3.2.2 精准停止脚本(stop.sh)

    通过 PID 终止进程,避免批量杀进程影响其他服务,stop.sh代码:

    shell

    #!/bin/bash
    # 过滤爬虫进程并终止
    PID=$(ps -ef | grep "scrapy crawl book_spider" | grep -v grep | awk '{print $2}')
    if [ -z "$PID" ]; then
    echo "未检测到运行中的爬虫进程"
    else
    kill -9 $PID
    echo "已终止爬虫进程 PID:$PID"
    fi

    赋予权限并执行停止操作:

    bash

    运行

    chmod +x stop.sh
    ./stop.sh

    3.2.3 进阶:简单进程守护脚本

    为防止爬虫意外崩溃退出,编写守护脚本定时检测进程状态,进程消失则自动重启,daemon.sh:

    shell

    #!/bin/bash
    # 循环检测进程状态,间隔10秒
    while true
    do
    PID=$(ps -ef | grep "scrapy crawl book_spider" | grep -v grep | awk '{print $2}')
    if [ -z "$PID" ]; then
    echo $(date) " 检测到爬虫已停止,执行自动重启" >> logs/daemon.log
    nohup scrapy crawl book_spider > logs/spider.log 2>&1 &
    fi
    sleep 10
    done

    启动守护进程:nohup ./daemon.sh &,实现 7×24 小时无人值守运行。

    四、第三步:项目标准化打包 实现完整分发

    对于跨主机分发、版本归档、集群部署场景,单纯拷贝文件易出现目录缺失、权限异常,本节使用 Python 官方setuptools工具完成项目打包,生成标准分发包。

    4.1 编写打包配置文件 setup.py

    在项目根目录创建setup.py打包配置文件,定义项目名称、版本、依赖、目录结构,代码如下:

    python

    运行

    from setuptools import setup, find_packages

    # 读取依赖清单
    with open("requirements.txt", "r", encoding="utf-8") as f:
    requires = [line.strip() for line in f.readlines() if line.strip()]

    setup(
    name="scrapy_book_spider",
    version="1.0.0",
    author="dev",
    description="Scrapy图书采集爬虫,集成SQLite入库、自动重试、多栏目适配",
    packages=find_packages(),
    install_requires=requires,
    include_package_data=True,
    # 额外打包静态文件、脚本、配置
    package_data={
    "": ["*.bat", "*.sh", "*.vbs", "requirements.txt"]
    },
    zip_safe=False
    )

    配置说明:

  • find_packages():自动识别项目内所有 Python 包,匹配模块化目录结构;
  • include_package_data与package_data:将脚本文件、依赖清单一并打入安装包;
  • zip_safe=False:禁止压缩为 zip 包,保证 Scrapy 可以正常读取本地配置、数据库文件。
  • 4.2 执行打包命令

    终端进入项目根目录,执行打包指令,生成两种主流分发格式:

    bash

    运行

    # 生成源码分发包(跨平台通用,推荐)
    python setup.py sdist

    # 生成wheel二进制包(Windows优先使用)
    python setup.py bdist_wheel

    执行完成后,项目根目录会新增dist目录,内部包含打包文件:

    • 源码包:scrapy_book_spider-1.0.0.tar.gz(Linux/Windows 通用)
    • wheel 包:scrapy_book_spider-1.0.0-py3-none-any.whl(Windows 快速安装)

    4.3 分发包安装与部署

    将dist目录下的压缩包拷贝至目标主机,完成部署。

    4.3.1 源码包部署(全平台通用)

    bash

    运行

    # 解压压缩包
    tar -zxvf scrapy_book_spider-1.0.0.tar.gz
    # 进入解压目录
    cd scrapy_book_spider-1.0.0
    # 执行依赖安装、启动脚本即可正常运行

    4.3.2 Wheel 包部署(Windows)

    bash

    运行

    pip install scrapy_book_spider-1.0.0-py3-none-any.whl

    安装完成后,系统环境可直接调用项目代码,结合启动脚本即可运行。

    4.4 打包文件目录完整性校验

    打包完成后核对核心文件是否全部包含:

  • 所有模块化源码目录:config、items、spiders、middlewares、pipelines、common;
  • 配置文件、Scrapy 核心配置settings.py、scrapy.cfg;
  • 所有 bat/sh/vbs 启动脚本、依赖清单requirements.txt;
  • 日志目录自动创建逻辑正常。
  • 五、综合部署流程:分平台完整操作步骤

    整合前文所有能力,整理 Windows、Linux 两大平台从零到运行的标准部署流程,可直接作为部署手册使用。

    5.1 Windows 平台完整部署流程

  • 目标主机安装 Python 3.8+,配置系统环境变量;
  • 将项目完整文件夹 / 打包压缩包拷贝至目标主机;
  • 双击install_dep.bat,自动安装全部依赖;
  • 按需选择启动方式:
    • 调试使用:双击start.bat前台运行;
    • 长期挂机:双击start_silent.bat后台运行;
  • 查看日志:进入logs目录打开spider.log排查问题;
  • 停止服务:双击stop.bat终止所有 Python 进程。
  • 5.2 Linux 平台完整部署流程

  • 目标主机安装 Python3、pip3:yum install python3 python3-pip(CentOS)/apt install python3 python3-pip(Ubuntu);
  • 上传项目压缩包至服务器,解压文件;
  • 进入项目目录,执行chmod +x *.sh赋予所有脚本执行权限;
  • 执行./install_dep.sh批量安装依赖;
  • 启动爬虫:./start.sh后台运行;
  • (可选)启动进程守护:nohup ./daemon.sh &;
  • 查看日志:tail -f logs/spider.log实时查看运行状态;
  • 停止服务:./stop.sh精准终止爬虫进程。
  • 六、日志管理与线上运维优化

    日志是线上运维的核心依据,结合部署方案补充日志切割、日志清理、日志查看相关优化策略,避免日志文件无限膨胀占用磁盘空间。

    6.1 日志按日期分割(进阶优化)

    长期运行场景下,单一日志文件体积会持续增大,修改启动脚本,按日期生成独立日志文件。以 Windows start.bat为例:

    bat

    @echo off
    chcp 65001
    set "logname=spider_%date:~0,4%%date:~5,2%%date:~8,2%.log"
    if not exist "logs" mkdir logs
    scrapy crawl book_spider >> logs/%logname% 2>&1
    pause

    脚本会自动生成spider_20250607.log格式日志,每日独立归档。Linux 脚本可结合date命令实现相同效果。

    6.2 日志自动清理策略

    编写定时清理脚本,自动删除 7 天前的历史日志,释放磁盘空间。Windows 可搭配任务计划程序,Linux 可搭配crontab定时任务。 Linux 日志清理脚本clear_log.sh:

    shell

    #!/bin/bash
    # 删除logs目录下7天前的日志文件
    find ./logs -name "*.log" -mtime +7 -rm
    echo "历史日志清理完成"

    配置 Linux 定时任务,每日凌晨 2 点执行清理:

    bash

    运行

    crontab -e
    # 添加内容:0 2 * * * /项目完整路径/clear_log.sh

    6.3 常见部署故障排查

    汇总部署阶段高频问题与解决方案:

    表格

    故障现象排查方向解决方案
    提示 scrapy 不是内部命令 Python Scripts 目录未加入环境变量 补充 Python 环境变量,重启终端
    依赖安装失败、版本冲突 原有环境库版本混乱 使用虚拟环境 python -m venv venv 隔离环境
    启动后无日志、无数据 目录权限不足(Linux) 执行 chmod -R 755 项目目录 赋予读写权限
    后台运行自动退出 进程被系统 OOM 杀死 优化爬虫并发、降低内存占用,增加进程守护
    数据库无法写入 部署目录无写入权限 移动项目至权限充足目录,或提升目录权限

    七、方案总结与选型建议

    7.1 不同场景方案选型参考

    结合项目规模、运行环境、运维能力给出选型建议:

  • 个人本地使用:优先使用原生目录 + start.bat前台脚本,简单易维护;
  • 多台 Windows 办公机分发:完整项目文件夹 + 依赖安装脚本 + 后台启动脚本;
  • 单台 Linux 云服务器:源码包部署 + nohup后台脚本 + 进程守护;
  • 企业集群 / 版本管控:setup.py标准打包 + 统一分发 + 定时任务运维。
  • 7.2 本章节核心能力总结

    本文完成了 Scrapy 项目从源码开发到工程化部署的全链路落地,核心实现三大能力:

  • 依赖统一管控:通过requirements.txt固化版本,实现跨环境一键安装,解决环境不一致问题;
  • 脚本封装:屏蔽复杂命令行,实现全平台一键启停,降低使用门槛;
  • 标准化打包:基于 setuptools 生成官方分发包,适配版本归档、集群分发场景; 同时配套日志持久化、进程守护、日志切割清理等运维能力,满足线上长期运行要求。
  • 八、系列后续内容预告

    本系列前五篇已依次完成:SQLite 数据入库、多栏目网页适配、项目模块化拆分、请求重试中间件、项目打包与一键部署,一套完整的单机生产级 Scrapy 爬虫体系已全部搭建完成。

    下一篇将基于现有完整架构,开展公开行业榜单批量采集、数据入库与基础数据分析实战,结合多栏目采集能力、SQLite 数据库,实现批量数据爬取、数据筛选、简单统计分析,落地数据采集 + 数据分析的完整业务场景。

    赞(0)
    未经允许不得转载:171主机测评 » Python Scrapy 爬虫实战进阶系列(五):项目打包与一键启动脚本 实现全环境快速部署
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址