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

来源:3-5 深度优先和广度优先原理

慕粉1724417796

2017-05-04

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

有什么好的方法?

写回答

2回答

bobby

2017-05-05

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

0
0

慕粉1724417796

提问者

2017-05-24

比如说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
4
bobby
回复
10codes15bugs
如果放了一个Request到redis队列中了,此时服务器没有返回,那么要等到服务器返回才处理下一个吗?如果这样谈何并发?所以这里是遇到url就交给scrapy,如果服务器没有Request的请求有返回就继续发送Request,如果有reponse就先解析response
2019-10-17
共4条回复

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

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

5795 学习 · 6290 问题

查看课程