scrapy回调函数不能正确执行到自己写的函数

  • 项目逻辑:

  1. 从豆瓣的图书首页拿到各个类别的列表,有6大类别,每个类别里面有很多的标签,比如文学类有27个小标签(小说、外国文学等等);
  2. 进入标签内部书籍排名,获取每页书籍url列表,访问书籍详情页拿到数据,然后递归获取下一页
  3. 重复1,2步骤,直至6大类别都遍历完为止

  • 现在的问题

scrapy回调函数不能正确执行到自己写的函数

  1. 每次的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如何区分。求解!

  1. 我手动点了n次debug调试,发现当url为“/tag/经典”或者其他后面的小标签时,程序会突然进入回调函数func,我越来越费解了。是我理解scrapy框架有些问题还是我程序就有问题?

  • 感谢大佬们的解惑,谢谢!

忙活好些天了,资料也查了很多,包括scrapy的doc我也查阅了一些,还是没有解决这个问题。


回答:

yield不是暂停,准确来说是挂起每次request并非是保存请求顺序执行。

以上是 scrapy回调函数不能正确执行到自己写的函数 的全部内容, 来源链接: utcz.com/p/937790.html

回到顶部