请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

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

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

正在回答 回答被采纳积分+3

3回答

提问者 慕粉171731593 2021-05-30 19:17:21

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

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


0 回复 有任何疑惑可以回复我~
  • bobby #1
    一般原因都是对方网站的问题,你抓取的是什么网站?你有没有试过控制爬取的速度,看看是不是运行的时间会更长一些
    回复 有任何疑惑可以回复我~ 2021-06-01 22:55:59
  • 提问者 慕粉171731593 #2
    起初我也是这么想的。控制时间都设置过。3,5秒都尝试过。并且我还用了代理。。。起初我也是想是不是对方网站把我禁掉了。从开始一直400后,我只是重启一下就可以访问。这证明对方并没有禁我。所以这是我想不明白的地方。
    回复 有任何疑惑可以回复我~ 2021-06-02 10:09:04
提问者 慕粉171731593 2021-05-30 19:15:53

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


0 回复 有任何疑惑可以回复我~
  • bobby #1
    非常好的踩坑经验,分享给有需要的同学,特别是SCHEDULER_PERSIST=True的设置。不过建议再去深入的看一下SCHEDULER_PERSIST=True相关的源码,看看实现原理是什么
    回复 有任何疑惑可以回复我~ 2021-06-01 22:54:19
bobby 2021-05-27 22:37:21
  1. 不是指定的回调,那被回调到什么函数呢?还是不执行回调函数?

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信