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

发布于 2022-09-12 01:47:18 字数 930 浏览 40 评论 0

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

Snipaste_2020-03-23_11-26-24.png

  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我也查阅了一些,还是没有解决这个问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眉黛浅 2022-09-19 01:47:18

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文