Scrapy 爬虫部署指南:Scrapyd、scrapyd-deploy 与 Zyte Scrapy Cloud 实战详解 Scrapy 爬虫部署指南Scrapyd、scrapyd-deploy 与 Zyte Scrapy Cloud 实战详解【免费下载链接】scrapyScrapy, a fast high-level web crawling scraping framework for Python.项目地址: https://gitcode.com/GitHub_Trending/sc/scrapy本文基于 Scrapy 官方文档的Deploying Spiders主题系统讲解将 Scrapy 爬虫从本地开发环境迁移到生产环境的两条主流路径自托管的开源方案 Scrapyd以及基于云端的 Zyte Scrapy Cloud。读完后你将理解scrapy.cfg中[deploy]配置段的设计原理、scrapyd-deploy工具与shub命令的工作方式、Scrapyd HTTP API如schedule.json的触发方式以及如何在两种部署方案之间平滑切换——所有内容均以当前仓库源码与文档为证据支撑。为什么需要部署本地开发与生产运行的差距Scrapy 官方文档见 docs/topics/deploy.rst开宗明义地指出在早期开发阶段在本地机器上运行 Scrapy 爬虫非常方便但当你需要执行长时间运行的爬虫或把爬虫迁移到生产环境持续运行时本地运行的方式就显得力不从心了。这正是各种部署方案要解决的问题。文档给出的当前主流选择有两个Scrapyd开源自建服务器部署Zyte Scrapy Cloud云服务托管部署。值得强调的是从源码结构看Scrapy 主仓库本身并不内置爬虫调度服务器。早期的 Scrapyd 代码曾在 Scrapy 仓库中维护但根据 docs/news.rst 中的历史变更记录Scrapyd changes: Scrapyd now uses one process per spider、New Scrapy service calledscrapydfor deploying Scrapy crawlers in production 等条目Scrapyd 后来被拆分为独立项目单独维护。当前仓库中 docs/topics/scrapyd.rst 也明确说明Scrapyd has been moved into a separate projectScrapyd 已迁移至独立项目。这意味着本文讨论的部署能力来自 Scrapy 生态的配套工具链而非scrapy包内可直接 import 的模块。方案一部署到 Scrapyd 服务器Scrapyd 是什么官方文档定义Scrapyd是一个用于运行 Scrapy 爬虫的开源应用它提供一个带有 HTTP API 的服务器能够运行并监控 Scrapy 爬虫。文档同时指出Scrapyd 由部分 Scrapy 开发者共同维护Scrapyd is maintained by some of the Scrapy developers因此与 Scrapy 主项目保持较高的兼容性。部署工具scrapyd-deploy向 Scrapyd 部署爬虫使用的是scrapyd-client包提供的scrapyd-deploy命令行工具。官方文档建议读者参阅 scrapyd-deploy 的专门文档获取完整用法。这里补充一个容易被忽视的历史事实Scrapy 1.0 之前存在内置的scrapy deploy命令该命令已在 1.0 版本中移除由独立的scrapyd-deploy工具取代——这一点在 docs/topics/commands.rst 中有明确说明Thescrapy deploycommand has been removed in 1.0 in favor of the standalonescrapyd-deploy。因此如果你在旧资料中看到scrapy deploy的用法在当前版本中已经不可用。核心配置scrapy.cfg 中的 [deploy] 段scrapyd-deploy读取的核心配置是项目根目录下的scrapy.cfg文件中的[deploy]段。Scrapy 项目模板中自带的scrapy.cfg内容如下见 scrapy/templates/project/scrapy.cfg# Automatically created by: scrapy startproject # # For more information about the [deploy] section see: # https://scrapyd.readthedocs.io/en/latest/deploy.html [settings] default ${project_name}.settings [deploy] #url http://localhost:6800/ project ${project_name}各字段含义配置项所属段说明default[settings]默认使用的 settings 模块scrapy startproject时由模板替换为实际项目名url[deploy]目标 Scrapyd 服务器的 HTTP 地址模板中默认被注释掉#url http://localhost:6800/部署前需取消注释并填入真实地址6800 是 Scrapyd 的默认端口project[deploy]部署到 Scrapyd 的项目名模板中默认为${project_name}这个模板正是scrapy startproject命令的产物。从源码 scrapy/commands/startproject.py 可以看到TEMPLATES_TO_RENDER元组将scrapy.cfg列为第一个需要渲染的模板文件其中${project_name}占位符会在项目创建时被实际项目名替换。scrapy.cfg 的查找与合并规则scrapyd-deploy与 Scrapy 命令行工具对scrapy.cfg的查找逻辑是一致的Scrapy 会按以下标准位置查找 ini 风格的scrapy.cfg文件详见 docs/topics/commands.rst 的 Configuration settings 小节/etc/scrapy.cfg或c:\scrapy\scrapy.cfg系统级~/.config/scrapy.cfg$XDG_CONFIG_HOME与~/.scrapy.cfg$HOME用户全局Scrapy 项目根目录内的scrapy.cfg。这些文件中的设置按上述顺序合并项目级配置优先级最高可覆盖用户级与系统级配置。底层实现位于 scrapy/utils/conf.pyclosest_scrapy_cfg()从当前目录逐级向上遍历父目录查找最近的scrapy.cfgget_sources()按系统 → 用户 → 最近项目的顺序组装配置来源列表再由get_config()交给ConfigParser读取合并。另外init_env()scrapy/utils/conf.py还会根据scrapy.cfg的[settings]段设置SCRAPY_SETTINGS_MODULE环境变量并把项目目录加入sys.path——这就是为什么scrapyd-deploy与scrapy命令都必须站在项目目录内或其子目录内才能正确定位项目配置。通过 Scrapyd HTTP API 触发爬虫运行部署只是第一步。Scrapyd 的 HTTP API 允许你在部署之后远程触发爬虫运行。一个典型的触发方式是schedule.json接口docs/topics/practices.rst 中分布式爬取Distributed crawls小节给出了真实示例把一个大型爬虫的 URL 列表切分为多个分区再向三台不同的 Scrapyd 服务器分别发起调度请求每个请求通过爬虫参数part指定要处理的分区curl http://scrapy1.mycompany.com:6800/schedule.json -d projectmyproject -d spiderspider1 -d part1 curl http://scrapy2.mycompany.com:6800/schedule.json -d projectmyproject -d spiderspider1 -d part2 curl http://scrapy3.mycompany.com:6800/schedule.json -d projectmyproject -d spiderspider1 -d part3这里体现了 Scrapyd API 的两个关键能力按 project spider 定位爬虫运行-d projectmyproject -d spiderspider1传递爬虫参数-d part1这类额外参数会作为 spider arguments 传入。docs/topics/spiders.rst 也印证了这一点Spider arguments can also be passed through the Scrapydschedule.jsonAPI. 爬虫内可通过self.crawler.job或 spider arguments 读取这些参数。docs/topics/practices.rst 还给出了整体思路当你有许多爬虫时自然的多服务器分发方式就是搭建多台 Scrapyd 实例在各实例间分配爬虫运行任务Scrapy 本身不提供内置的多服务器分布式机制多机扩展正是通过 Scrapyd 层实现的。方案二部署到 Zyte Scrapy CloudZyte Scrapy Cloud是由 ZyteScrapy 背后的公司提供的托管云服务。官方文档说明它的两个核心优势免去了自建和监控服务器的运维负担提供图形界面UI用于管理爬虫、查看抓取结果items、日志logs与统计信息stats。向 Zyte Scrapy Cloud 部署爬虫使用的是shub命令行工具更多用法以 Zyte Scrapy Cloud 官方文档为准。与 Scrapyd 的兼容性与平滑切换官方文档中一个实用性很强的结论是Zyte Scrapy Cloud 与 Scrapyd 兼容两者可以按需切换配置读取方式与scrapyd-deploy相同——都是从scrapy.cfg文件读取。这一兼容性的技术基础可以推断为Zyte Scrapy Cloud 作为云托管服务复用了 Scrapyd 的 API 形态与部署协议因此同一份scrapy.cfg含[deploy]段的url与project配置在两种环境间切换时只需更换目标地址无需改动爬虫代码与项目结构。这意味着本地开发 → 自建 Scrapyd 试运行 → 迁移到云服务的路径是平滑的。两种方案对比与选型建议维度Scrapyd自托管Zyte Scrapy Cloud云服务性质开源自维护服务器Zyte 提供的托管服务部署工具scrapyd-deployscrapyd-client 包shub命令行工具监控方式HTTP API图形界面管理爬虫、查看 items/logs/stats运维成本需自行搭建与维护服务器无需搭建和监控服务器配置载体scrapy.cfg的[deploy]段同样读取scrapy.cfg与 Scrapyd 兼容可互切多机扩展可搭建多台实例分发爬虫运行见 Distributed crawls 实践由云端调度选型上如果需要对爬取基础设施有完全控制、且具备运维能力Scrapyd 是自然的开源选择并可配合多台实例做爬虫运行分发如果希望免去服务器运维、通过 UI 审阅抓取结果与日志Zyte Scrapy Cloud 更合适且从 Scrapyd 迁移过去无需改变项目配置结构。另外docs/faq.rst 中生产环境推荐的爬虫部署方式是什么What is the recommended way to deploy a Scrapy crawler in production?一题也直接指向本主题进一步说明部署是官方视角下从开发走向生产必须跨越的一环。小结Scrapy 自身的定位是爬虫框架而在哪里跑、怎么调度、如何监控的部署能力由生态配套承担生产部署的两大选项是开源的Scrapyd与云托管的Zyte Scrapy Cloud两者共用同一份scrapy.cfg配置约定[deploy]段的url与project实现方案间可切换自托管路径使用scrapyd-client提供的scrapyd-deploy部署内置scrapy deploy命令自 1.0 起已移除部署后可通过 Scrapyd 的schedule.json等 HTTP API 触发爬虫运行并传递爬虫参数天然支持多实例分发当前仓库中的scrapy.cfg模板scrapy/templates/project/scrapy.cfg与配置加载实现scrapy/utils/conf.py是理解这一部署机制的最直接源码入口。【免费下载链接】scrapyScrapy, a fast high-level web crawling scraping framework for Python.项目地址: https://gitcode.com/GitHub_Trending/sc/scrapy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考