
scrapyd 镜像是一个基于 debian:bookworm 的 Docker 镜像,集成了 Scrapy 生态系统的多个最新稳定版工具,旨在提供便捷的环境用于部署和运行 Scrapy 爬虫。该镜像预安装了 8 个核心 Python 包,覆盖爬虫开发、部署、运行、监控、JavaScript 渲染等全流程需求,可作为 Scrapy 项目的基础镜像直接使用。
镜像包含以下最新稳定版 Python 包:
scrapyd-deploy 命令用于部署项目debian:bookworm以下 docker-compose.yml 定义了三个服务:scrapyd(后台服务)、scrapy(交互式开发)、scrapyrt(实时 API 服务):
yamlversion: "3.8" services: # Scrapyd 后台服务:部署和运行爬虫 scrapyd: image: easypi/scrapyd ports: - "6800:6800" # Scrapyd 默认端口 volumes: - ./data:/var/lib/scrapyd # 持久化存储爬虫数据(如 items、日志) - /usr/local/lib/python3.11/dist-packages # 挂载 Python 依赖(可选) restart: unless-stopped # Scrapy 交互式开发环境:用于编写和测试爬虫 scrapy: image: easypi/scrapyd command: bash # 启动交互式 shell volumes: - .:/code # 挂载本地项目代码 working_dir: /code # 工作目录设为项目根目录 restart: unless-stopped # Scrapyrt 实时 API 服务:为爬虫提供 HTTP 接口 scrapyrt: image: easypi/scrapyd command: scrapyrt -i 0.0.0.0 -p 9080 # 启动 scrapyrt,绑定所有接口和 9080 端口 ports: - "9080:9080" # Scrapyrt 默认端口 volumes: - .:/code # 挂载本地项目代码 working_dir: /code # 工作目录设为项目根目录 restart: unless-stopped
启动 Scrapyd 服务
bash# 后台启动 scrapyd 服务 docker-compose up -d scrapyd # 查看服务日志 docker-compose logs -f scrapyd
部署并运行爬虫项目
准备开发环境(本地主机操作):
bash# 创建 Python 虚拟环境 mkvirtualenv -p python3 webbot # 安装 scrapy 和 scrapyd-client(用于部署) pip install scrapy scrapyd-client # 创建 Scrapy 项目 scrapy startproject myproject cd myproject # 将项目关联到虚拟环境(可选) setvirtualenvproject # 生成示例爬虫 scrapy genspider myspider mydomain.com # 编辑爬虫代码(按需修改) scrapy edit myspider # 验证爬虫列表 scrapy list
配置部署参数:编辑项目根目录下的 scrapy.cfg:
ini[settings] default = myproject.settings # 项目默认配置 [deploy] url = http://localhost:6800/ # Scrapyd 服务地址(与 docker-compose 映射一致) project = myproject # 项目名称
部署项目到 Scrapyd:
bash# 部署项目 scrapyd-client deploy # 调度爬虫运行 curl http://localhost:6800/schedule.json -d project=myproject -d spider=myspider
访问 Scrapyd 管理界面:打开浏览器访问 http://localhost:6800,可查看爬虫状态、调度任务等。
获取爬取结果:
bash# 从容器中复制爬取的 items 数据到本地 docker cp scrapyd_scrapyd_1:/var/lib/scrapyd/items . # 查看数据文件结构 tree items # 示例输出: # items # └── myproject # └── myspider # └── ad6153ee5b0711e68bc70242ac110005.jl # 爬取结果文件(JSON Lines 格式)
用于快速测试单文件爬虫脚本,无需完整项目结构。
示例:爬取 Stack Overflow 热门问题
创建爬虫脚本(本地主机操作):
bashcat > stackoverflow_spider.py << _EOF_ import scrapy class StackOverflowSpider(scrapy.Spider): name = 'stackoverflow' start_urls = ['http://stackoverflow.com/questions?sort=votes'] def parse(self, response): # 提取问题链接并跟进 for href in response.css('.question-summary h3 a::attr(href)'): full_url = response.urljoin(href.extract()) yield scrapy.Request(full_url, callback=self.parse_question) def parse_question(self, response): # 提取问题详情并输出 yield { 'title': response.css('h1 a::text').extract()[0], 'votes': response.css('.question div[itemprop="upvoteCount"]::text').extract()[0], 'body': response.css('.question .postcell').extract()[0], 'tags': response.css('.question .post-tag::text').extract(), 'link': response.url, } _EOF_
启动交互式 Shell 并运行爬虫:
bash# 启动 scrapy 服务的交互式 shell docker-compose run --rm scrapy # 在容器内执行爬虫(输出结果到 JSON Lines 文件) scrapy runspider stackoverflow_spider.py -o top-stackoverflow-questions.jl # 查看爬取结果 cat top-stackoverflow-questions.jl # 退出容器 exit
Scrapyrt 可为现有 Scrapy 项目提供 HTTP API,支持通过 URL 直接触发爬虫。
启动 Scrapyrt 服务并测试
准备示例项目(本地主机操作):
bash# 克隆 Scrapy 官方示例项目(quotesbot) git clone https://github.com/scrapy/quotesbot.git .
启动 Scrapyrt 服务:
bashdocker-compose up -d scrapyrt
通过 HTTP API 触发爬虫:
bash# 调用 scrapyrt API 爬取指定页面(需安装 jq 解析 JSON) curl -s 'http://localhost:9080/crawl.json?spider_name=toscrape-css&callback=parse&url=http://quotes.toscrape.com/&max_requests=5' | jq -c '.items[]'
debian:bookworm探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务