You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy-Redis爬虫未返回结果至crawler:items,该如何排查?

Scrapy-Redis + Docker 无结果返回排查步骤

1. 先确认基础运行状态

  • 执行 docker-compose ps,检查Redis、Scrapy Worker容器是否处于Up状态,有没有频繁重启、退出的情况
  • 查看容器日志定位基础错误:
    • Redis日志:docker-compose logs redis,确认Redis启动正常,无连接拒绝、权限异常
    • Scrapy Worker日志:docker-compose logs scrapy-worker,重点看是否有爬虫启动失败、Redis连接报错、解析错误等日志,同时留意是否有start_urls被读取的记录

2. 追踪Redis队列的数据流

  • 进入Redis容器命令行:docker exec -it <redis容器ID> redis-cli,检查核心队列:
    • 待爬队列:llen 你的爬虫名:requests,确认提交的start_urls是否已进入队列
    • 处理中队列:llen 你的爬虫名:requests:processing,如果数值持续不为0,说明请求卡在处理环节
    • 重试队列:llen 你的爬虫名:requests:retry,数值过大意味着请求一直在重试,大概率是目标站反爬、请求参数错误
    • 已完成队列:llen 你的爬虫名:requests:done,确认是否有请求被处理完成

3. 核对Scrapy-Redis配置

  • 打开Scrapy的settings.py,确认关键配置:
    • REDIS_URL是否对应Docker内Redis的地址(比如redis://redis:6379/0,Docker-compose中服务名可直接解析)
    • SCHEDULER是否设为scrapy_redis.scheduler.Scheduler
    • DUPEFILTER_CLASS是否设为scrapy_redis.dupefilter.RFPDupeFilter
    • ITEM_PIPELINES是否包含scrapy_redis.pipelines.RedisPipeline,且优先级设置合理(比如300)
    • SCHEDULER_PERSIST是否为True,避免爬虫停止后队列被清空

4. 单独调试爬虫代码

  • 脱离Docker环境,本地运行爬虫:拉取代码到本地,安装依赖后执行scrapy crawl 你的爬虫名,看是否能正常生成Item,有没有解析报错
  • 检查爬虫核心逻辑:
    • parse方法是否正确返回Item对象,有没有因响应状态码异常(如403、500)直接跳过Item生成
    • 是否存在无限递归请求,导致爬虫一直在爬取新链接,无法输出结果
    • 提交的start_urls格式是否正确,有没有漏写协议(如http://)、域名拼写错误

5. 排查Docker网络连通性

  • 进入Scrapy Worker容器:docker exec -it <Scrapy容器ID> bash
  • 测试Redis连通性:用telnet redis 6379或redis-cli -h redis ping,确认容器间网络互通
  • 检查Docker-compose网络配置:确保所有服务都在同一个自定义网络或默认网络下,无网络隔离情况

6. 验证Redis数据与权限

  • 通过RedisInsight检查是否存在其他类似命名的Item键(比如爬虫名写错导致键为spider_test:items而非预期的crawler:items)
  • 确认Redis未设置密码,或Scrapy配置中已正确填写REDIS_PASSWORD
  • 检查Redis持久化配置,避免数据因容器重启丢失

内容的提问来源于stack exchange,提问作者rayad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:45:34