用Docker部署Python爬虫,零基础也能按步骤跑起来

用Docker部署Python爬虫,零基础也能按步骤跑起来


很多新手写好了爬虫脚本,却卡在部署这一步——没有对应的Python环境、依赖冲突、服务器配置不对。

其实用 Docker部署Python爬虫 可以完美解决这些问题,把整个运行环境打包成一个容器,无论你的服务器是什么系统,都能一键启动。

下面我按照自己日常运维的习惯,从零开始带你走完整个流程。


为什么选Docker跑爬虫



  • 环境隔离:爬虫依赖的库、驱动(比如Selenium + Chrome)不会污染宿主机。

  • 快速迁移:换台机器,拉取镜像就跑,不用重新安装。

  • 定时稳定:容器重启策略可以保证爬虫掉线后自动拉起来。


如果你手头有个爬虫脚本(比如抓取豆瓣电影Top250),下一步就是把它装进容器。


开始之前:服务器需要准备什么



  1. 安装Docker(如果是宝塔面板,在软件商店搜Docker管理器安装;命令行安装命令如下):


curl -fsSL https://get.docker.com | sh
sudo systemctl start docker
sudo systemctl enable docker

安装完后运行 docker version 确认正常。



  1. 准备好爬虫代码:假设你的项目结构如下:


crawler/
├── spider.py # 主爬虫文件
├── requirements.txt # 依赖列表(如 requests, beautifulsoup4, selenium)
└── chromedriver # 如果用到浏览器驱动(可选)

如果爬虫需要访问外部网站,确保服务器防火墙打开了对应出站端口。


撰写Dockerfile,打包爬虫环境


在项目根目录创建文件 Dockerfile,内容如下(示例基于 Python 3.10):


# 使用官方 Python 镜像
FROM python:3.10-slim

设置工作目录

WORKDIR /app

复制依赖文件并安装(利用缓存层加速)

COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

复制爬虫代码

COPY . .

声明容器运行时执行的命令

CMD ["python", "spider.py"]


如果用了 Selenium + Chrome,需要额外安装 Chromium 和驱动,可以搜“dockerfile selenium”得到模板。


构建并运行容器


构建镜像


在当前目录(包含Dockerfile)执行:


docker build -t my-crawler:1.0 .

等待依赖下载完成,出现 Successfully tagged my-crawler:1.0 即成功。


运行容器一次性测试


docker run --rm -v $(pwd)/output:/app/output my-crawler:1.0


  • --rm 表示容器退出后自动删除,适合调试。

  • -v 挂载本地 output 目录到容器内,方便爬虫写入数据到宿主机。


如果爬虫需要长期运行(比如每10分钟抓一次),改用:


docker run -d --name crawler-instance -v $(pwd)/output:/app/output --restart unless-stopped my-crawler:1.0

-d 后台运行,--restart 保证容器退出时自动重启。


避坑指南:常见错误与解决


❌ 容器内时间和本地不一致


爬虫依赖时间戳?

在 Dockerfile 或运行命令中加入:


docker run -e TZ=Asia/Shanghai ...

或者在 Dockerfile 中设置 ENV TZ=Asia/Shanghai


❌ 依赖安装失败(如 Pillow, lxml)


Python 基础镜像缺少编译工具,

换用 python:

3.10-slim-buster
python:

3.10-bullseye


或者在 Dockerfile 里提前安装 build-essential


RUN apt-get update && apt-get install -y build-essential libxml2-dev libxslt1-dev && rm -rf /var/lib/apt/lists/*

❌ 网络请求超时或IP被封


容器内IP是独立出口,建议使用代理或轮换IP。

可以在运行命令中设置环境变量:


docker run -e HTTP_PROXY=http://your-proxy:port ...

❌ 爬虫代码写死了文件路径


容器内的路径是 /app,务必使用相对路径或从环境变量读取。

推荐在脚本中写:


import os
output_dir = os.environ.get('OUTPUT_DIR', '/app/output')

然后在运行命令时通过 -e OUTPUT_DIR=/app/output 或挂载卷覆盖。


如何验证爬虫是否正常运行



  1. 查看容器日志


docker logs -f crawler-instance

可以看到爬虫的打印输出,判断抓取进度。



  1. 检查输出文件:在宿主机 ./output/ 文件夹下应该能看到生成的数据(如 movies.csv)。
  2. 查看容器状态


docker ps -a | grep crawler-instance

状态应为 Up(运行中)或 Restarting(表示重启策略生效)。



  1. 监控资源占用


docker stats crawler-instance

查看CPU和内存使用是否正常,如果突高说明爬虫逻辑可能有问题。


高频问题解答


Q:爬虫需要定时执行,怎么实现?

A:在宿主机使用 crontab,写一行 0 */2 * * * docker start crawler-instance(前提是容器已经停止);或者直接在容器内写循环休眠,配合 --restart unless-stopped 持续运行。


Q:数据都想保留在宿主机,怎么操作?

A:使用 -v 挂载卷,如上文所示。注意容器内写入路径与挂载路径一致。


Q:爬虫依赖数据库如 MongoDB,如何连接?

A:将 MongoDB 也部署为 Docker 容器,使用 --link(不推荐)或创建自定义网络 docker network create crawler-net,两个容器都加入该网络,通过容器名通信。


最后


如果你正在处理 Docker部署Python爬虫,建议先按本文步骤完整执行一遍,跑通最基本的示例,再根据自己的爬虫需求调整 Dockerfile 和运行参数。

遇到异常时优先回看避坑和高频问题部分,大部分新手问题都能在容器日志或官方文档找到答案。

一旦掌握了这套流程,后续批量部署多个爬虫就很容易了。

分享到:
上一篇
Linux性能优化CPU内存:从零开始:Linux系统CPU
下一篇
服务器搭建私有DNS:零基础在服务器上搭建私有DNS,秒懂配
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意