redis-scrapy 分布式爬虫之缓存问题

来源:4-25 有没有方法可以比较准确的解析出 title 和正文内容

慕粉171731593

2021-05-25

老师您好。我在做爬虫的时候发现redis-scrapy两个问题。

  1. 在爬虫执行过程中中间结束掉服务后再重新启动。发现重缓存队列中拿到的request没有callback函数。导致在回调过程中出错调试发现回调的函数并不是我指定的回调函数。
  2. 缓存队列问题。当在执行爬虫过程中。执行没多久后redis就开始拒绝连接。重新启动后又可以短时间内连接到redis。这两个问题网上找了好久答案也没找到解决方案。非常愁人。

因为老师您的视频比较早我看的时候已经找不到对应的版本了。
redis-scrapy
请老师给远程帮忙解决一下。代码和错误信息贴进来就提交不了问题了

写回答

3回答

慕粉171731593

提问者

2021-05-30

老师。我目前遇到一个匪夷所思的问题。

我使用的redis-scrapy框架做的分布式爬虫。启动程序后,执行大概30-40分钟后。后面的请求全部都是400了。我只要重启程序后。接着后续缓存的请求执行,就没有问题。我分析的结果是。不是对方网站的问题。而且scrapy框架哪的问题。或者说我没有配置好。具体哪没配好我找不到原因。


0
2
慕粉171731593
起初我也是这么想的。控制时间都设置过。3,5秒都尝试过。并且我还用了代理。。。起初我也是想是不是对方网站把我禁掉了。从开始一直400后,我只是重启一下就可以访问。这证明对方并没有禁我。所以这是我想不明白的地方。
2021-06-02
共2条回复

慕粉171731593

提问者

2021-05-30

老师。我已经解决了上面的两个问题。首先是我先分享碰到这两个问题的原因。第一关于redis连接失败的问题。首先我的redis是docker容器运行的。我在启动的时候时候设置docker容器保持开启状态。也就是说只要redis的docker挂掉了。他就会重启容器。爬虫确实把redis的docker容器给跑挂了。之后容器自动启动。导致看到的效果就是redis活的。scrapy连不到redis。第二个问题是执行了回调函数。但回调的函数不正确。目前我通过设置SCHEDULER_PERSIST=True后。没遇到过了。


0
1
bobby
非常好的踩坑经验,分享给有需要的同学,特别是SCHEDULER_PERSIST=True的设置。不过建议再去深入的看一下SCHEDULER_PERSIST=True相关的源码,看看实现原理是什么
2021-06-01
共1条回复

bobby

2021-05-27

  1. 不是指定的回调,那被回调到什么函数呢?还是不执行回调函数?

  2. 这里的拒绝连接是对应的网站抓取不了还是说连接不到redis了?

0
0

Scrapy打造搜索引擎 畅销4年的Python分布式爬虫课

带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎

5795 学习 · 6290 问题

查看课程