推荐基于python:3.11-slim构建轻量爬虫镜像,仅装requests、bs4、lxml等必需库;通过-v挂载配置与输出目录;用Session、随机UA、sleep防反爬;宿主机cron调用docker run实现定时任务。

准备一个轻量级Python爬虫Docker镜像
不用从零写Dockerfile,推荐基于官方python:3.11-slim镜像构建,体积小、启动快、安全性高。重点只装爬虫必需的库:requests、beautifulsoup4、lxml、fake-useragent(可选)、schedule(如需定时)。避免安装pandas、numpy等重型依赖,除非项目真用得上。
示例 Dockerfile:
FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . CMD ["python", "spider.py"]
把爬虫脚本和配置放进容器
确保你的爬虫代码结构清晰,比如:
– spider.py:主入口
– config.py 或 .env:存目标URL、请求头、数据库地址等(别硬编码)
– data/(可选):存放抓取结果,可通过卷映射导出
运行时用 -v 挂载配置或输出目录,方便调试和数据持久化:
docker run -v $(pwd)/output:/app/output my-spider
这样每次运行生成的 CSV 或 JSON 文件会自动保存到宿主机当前目录下的 output 文件夹里。
立即学习“Python免费学习笔记(深入)”;
处理反爬与网络环境问题
- Docker默认使用bridge网络,IP是动态的——多数网站不封Docker容器IP,但高频请求仍可能触发验证码或限流
- 加随机User-Agent和请求间隔(如 time.sleep(1)),比换IP更简单有效
- 需要代理时,可在 requests.get() 中传入 proxies 参数,或统一在环境变量里设 http_proxy/https_proxy,Docker运行时用 --env 注入
- 若目标站校验 Referer 或 Cookie,用 Session 对象保持状态,不要每次新建 requests.get
启动、日志与简单调度
用 docker run 运行一次:
docker build -t my-spider . && docker run --rm my-spider
加 --rm 自动清理容器,适合单次任务;想看实时日志就加 -it。
定时运行?不用进容器装cron。直接在宿主机用systemd timer或 crontab 调用 docker run:
# 每天早上8点跑一次 0 8 * * * docker run --rm my-spider
更稳的做法是写个 shell 脚本封装启动逻辑(比如失败重试、发通知),再由定时任务调用。

















