请稍等 ...
×

采纳答案成功!

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

Scrapy+Redis实现增量爬取,不执行callback函数(Debug模式打断点会执行)

老师,如题。
按照之前请教过您的方案,尝试通过Redis的 pub/sub实现增量爬虫,执行时,发现yield Request()后没执行正常去callback函数。
但是在debug模式下打来断点,就能正常进入,请老师帮忙分析下
代码如下:
图片描述
日志如下:
图片描述
日志在如截图的那里,感觉就卡住了,正常解析的话,还有很多日志的。

PS: 尝试在for循环中sleep,也没用

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

1回答

bobby 2020-01-05 12:00:08

你如果是通过脚本放入到redis中的脚本不一定会在start_requests中获取到,也有可能是放到parse函数的逻辑中出现,你再parse函数中也打印一个日志看看

0 回复 有任何疑惑可以回复我~
  • 提问者 慕尼黑7546459 #1
    老师,关于增量爬虫,我这里的做法是这样:
    1、业务系统将 电影名称 发布到redis队列
    2、爬虫系统,在spider 的 start_requests 方法中(因为没有start_url,一定会从start_requests方法执行吧),通过redis 的pub/sub 监听消息,接受到消息后,format成完整的url, 再 yield Request 给Scrapy 下载。
    
    现在遇到的问题是:
    1、从日志上看,已经接收到redis队列的消息了,并且已经提交给Scarpy 的engine,然后似乎就卡在那里了。
    
    日志的最后两行是这样:
    2020-01-07 17:00:50 [selenium.webdriver.remote.remote_connection] DEBUG: Finished Request
    2020-01-07 17:00:50 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://search.douban.com/movie/subject_search?search_text=%E6%9D%83%E5%88%A9%E7%9A%84%E6%B8%B8%E6%88%8F&cat=1002> (referer: None)
    
    然后就没下文了。
    
    PS:  
    1、yield Request里的url是没问题的,因为单独 yield Request这个url,是正常的。
    2、然后我在debug模式下运行,在yield Request的那行打断点,就能正常执行(如果是debug模式,但不打断点,也不执行);但是发现执行完,进程就被结束掉了,怎样才能让进程不结束,让redis 一直监听消息?
    
    老师帮忙看看我 start_requests 里面的代码,是不是有什么问题
    谢谢
    回复 有任何疑惑可以回复我~ 2020-01-07 17:06:23
  • bobby 回复 提问者 慕尼黑7546459 #2
    这种需要使用scrapy-redis不要直接使用scrapy完成,你现在使用的是scrapy没有使用scrapy-redis吧
    回复 有任何疑惑可以回复我~ 2020-01-08 12:45:05
  • 提问者 慕尼黑7546459 回复 bobby #3
    好的,老师。
    因为任务量不是很大,暂时不需要分布式爬虫,所以本来不想引入scrspy-redis的。就想结合redis的pub/sub来实现增量爬取的,就遇到这个问题了。
    回复 有任何疑惑可以回复我~ 2020-01-11 08:59:33
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信