请稍等 ...
×

采纳答案成功!

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

老师,用scrapy-redis怎么实现深度优先啊

因为用scrapy-redis的rediscrawlspider会先把符合的url全部加到队列中,在执行callback,所以调试很麻烦

有什么好的方法?

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

2回答

bobby 2017-05-05 14:13:31

调试会麻烦? 目前主要麻烦的地方是哪里?和普通的debug是一样的啊

0 回复 有任何疑惑可以回复我~
提问者 慕粉1724417796 2017-05-24 09:05:46

比如说Rule有很多条,但是有callback是最后一条也是详细页,会等所有满足callback的那条Ruel的url全部加入redis队列中,才会执行callback那条Rule

这就会出现这种:redis中都几百万条request了,但没有一条执行callback

rules = (
   Rule(LinkExtractor(allow=r'11467\.com/\w+?/$')),
   Rule(LinkExtractor(allow=r'11467\.com/.*')),
   Rule(LinkExtractor(allow=r'11467\.com/\w+?/co/\d+\.htm$'), callback='parse_detail', follow=True),
)

有没有办法设定Rule的优先级,让特定Rule优先处理,比如最后一条有callback的rule

0 回复 有任何疑惑可以回复我~
  • bobby #1
    scrapy-redis中默认使用的是优先队列, 你可以在放request的时候指定一下优先级让某些url放到队列的头部, 课程中已经讲过源码了 应该知道如何设置优先级吧
    回复 有任何疑惑可以回复我~ 2017-05-24 17:35:14
  • 10codes15bugs 回复 bobby #2
    老师  这种情况是正常的吗?? 不是应该边爬边提取码?
    比如说Rule有很多条,但是有callback是最后一条也是详细页,会等所有满足callback的那条Ruel的url全部加入redis队列中,才会执行callback那条Rule
    
    这就会出现这种:redis中都几百万条request了,但没有一条执行callback
    回复 有任何疑惑可以回复我~ 2019-10-14 17:35:37
  • 不是应该一边把request输入到redis队列中一边把request提出来解析吗?为什么要等request全部放到队列中才开始解析request?
    回复 有任何疑惑可以回复我~ 2019-10-14 17:37:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信