scrapy回调函数不能正确执行到自己写的函数
- 项目逻辑:
- 从豆瓣的图书首页拿到各个类别的列表,有6大类别,每个类别里面有很多的标签,比如文学类有27个小标签(小说、外国文学等等);
- 进入标签内部书籍排名,获取每页书籍url列表,访问书籍详情页拿到数据,然后递归获取下一页
- 重复1,2步骤,直至6大类别都遍历完为止
- 现在的问题
- 每次的yield scrapy.Request(url,callback=func)都没有执行到自己写的func函数。举个例子:我拿到了文学大类别中的“小说”标签的url,按理应当调用我的get_page_book_url函数来获取书籍的url列表,但是我在debug模式下没有看到调用这个方法,反而是进行了下一次循环(也就是去获取到文学大类别的"外国文学"标签的url)。
解释:按照python语法的理解,你的yield会暂停当前循环,执行yield后面的scrapy.Request(url,callback=func)这个请求。我查阅了一些资料,说scrapy会自动保存这些请求而不是直接请求,好吧,我半信半疑。如果是这样,你scrapy总该有个队列来保存我这个请求顺序吧,否则每次的response如何区分。求解!
- 我手动点了n次debug调试,发现当url为“/tag/经典”或者其他后面的小标签时,程序会突然进入回调函数func,我越来越费解了。是我理解scrapy框架有些问题还是我程序就有问题?
- 感谢大佬们的解惑,谢谢!
忙活好些天了,资料也查了很多,包括scrapy的doc我也查阅了一些,还是没有解决这个问题。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
yield不是暂停,准确来说是挂起每次request并非是保存请求顺序执行。