Scrapyd中爬虫无法爬取但scrapy crawl命令可正常执行的问题
Scrapyd部署爬虫启动即终止问题的排查与解决
针对你遇到的本地Scrapy爬虫运行正常,但Scrapyd部署后启动立即结束、无爬取记录的问题,按以下步骤逐一排查:
1. 修复项目名称大小写不一致问题
你的scrapy.cfg中配置的项目名为nebulaemailscraper,但listprojects.json返回的部署项目名是NebulaEmailScraper,Scrapyd对项目名称大小写敏感,调度时必须严格匹配。
操作:调度爬虫时使用正确的项目名,示例命令:
curl http://localhost:6800/schedule.json -d project=NebulaEmailScraper -d spider=examplespider
2. 确保虚拟环境依赖完全一致
本地开发环境和Scrapyd运行环境的依赖可能存在差异,导致爬虫在Scrapyd环境中无法正常初始化。
操作:
- 本地导出依赖清单:
pip freeze > requirements.txt
- 在Scrapyd所在的虚拟环境中安装依赖:
pip install -r requirements.txt
重点确认爬虫用到的第三方库(如解析库、代理工具等)是否都已安装。
3. 排查爬虫初始请求来源
爬虫启动即终止的核心原因通常是没有初始请求,检查你的爬虫代码:
- 如果
start_urls是从本地文件读取:确认服务器上存在该文件,且路径与本地一致; - 如果
start_urls依赖环境变量:确保Scrapyd启动时已加载对应环境变量(如通过systemd服务配置Environment参数,或手动启动前先执行export命令); - 如果
start_urls由自定义参数生成:调度爬虫时需传递对应参数,示例:
curl http://localhost:6800/schedule.json -d project=NebulaEmailScraper -d spider=examplespider -d category=inventory
4. 修复settings.py的重复配置
你的settings.py中重复定义了SPIDER_MIDDLEWARES、DOWNLOADER_MIDDLEWARES等配置块,可能导致配置解析异常。删除重复部分,保留一份完整配置:
BOT_NAME = "nebulaemailscraper" SPIDER_MODULES = ["nebulaemailscraper.spiders"] NEWSPIDER_MODULE = "nebulaemailscraper.spiders" USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36" ROBOTSTXT_OBEY = False DOWNLOAD_DELAY = 0.1 SPIDER_MIDDLEWARES = { "nebulaemailscraper.middlewares.NebulaemailscraperSpiderMiddleware": 543, } DOWNLOADER_MIDDLEWARES = { 'nebulaemailscraper.middlewares.NebulaemailscraperDownloaderMiddleware': 543, } EXTENSIONS = { 'scrapy.extensions.telnet.TelnetConsole': None, } ITEM_PIPELINES = { "nebulaemailscraper.pipelines.EmailsDetailsPipeline": 300, }
同时检查中间件、管道代码,确认没有依赖本地路径或未在服务器上存在的资源。
5. 提升日志级别查看详细错误
默认日志级别无法显示爬虫初始化时的异常,修改Scrapyd配置文件(默认路径为~/.scrapyd.conf或/etc/scrapyd/scrapyd.conf):
[scrapyd] log_level = DEBUG
重启Scrapyd后重新调度爬虫,查看logs/目录下对应项目的日志文件,即可获取爬虫启动失败的具体原因。
6. 模拟Scrapyd环境直接运行爬虫
在Scrapyd的虚拟环境中直接运行爬虫,验证是否存在环境相关错误:
# 找到Scrapyd部署的项目路径(通常在scrapyd的projects目录下) cd /path/to/scrapyd/projects/NebulaEmailScraper scrapy crawl examplespider
如果运行报错,即可定位具体问题。
内容的提问来源于stack exchange,提问作者waltmagic
相关产品推荐
相关产品推荐

