[scrapy]scrapy源码分析--数据是如何处理的

举报
~大鱼~ 发表于 2021/05/28 03:08:27 2021/05/28
【摘要】 目录 下载中间件(Download MiddleWare)是如何加载的 Spider MiddleWare是如何加载的 配置文件是如何起作用的 整体的执行流程是怎样的 扩展件是如何工作的 数据是怎么处理的 分析 我们之前经常会写yield Request ,yield Item 这种东西,到底yield 是做什么用的?返回的item又是如何处理的,好了我们今天先看数据是数...

目录

  • 下载中间件(Download MiddleWare)是如何加载的
  • Spider MiddleWare是如何加载的
  • 配置文件是如何起作用的
  • 整体的执行流程是怎样的
  • 扩展件是如何工作的
  • 数据是怎么处理的

分析

我们之前经常会写yield Request ,yield Item 这种东西,到底yield 是做什么用的?返回的item又是如何处理的,好了我们今天先看数据是数据处理的。

 

我们正常的思路就是从spider的parse方法来着手,因为我们写的最多的代码就是从这里开始的,这样我们直接从scraper.py来看

 

这里我就们就可以看到spider如果指定了callback,那callback对应的方法优先级最高,如果没有callback,那就是默认的spider.parse方法,我们来看看谁在调用这个call_spider方法

《[scrapy]scrapy源码分析--数据是如何处理的》

到最后一步的时候其实已经跨到engine.py了,我们不是经常写yield Request或者yield item这种方法吗?这yield和return 有什么区别呢,不急,我们先看看是怎么处理我们的输出的,先看如下的代码:

 

拿到返回的内容之后,先判断是item 还是request,如果是item ,则调用process_item方法–就是我们在pipeline里面的定义的内容,这里被加载进来之后做数据的方法,如果是request类型呢,就放回到队列之中,然后进一步的处理。

我们小小看一步是如何处理的

《[scrapy]scrapy源码分析--数据是如何处理的》

看看这个_scrape_next方法

信号槽中一直存在队列的时候,那就一直处理直到结束,一直调用_scrape方法。这样整个的流程和逻辑就清晰了.

文章来源: brucedone.com,作者:大鱼的鱼塘,版权归原作者所有,如需转载,请联系作者。

原文链接:brucedone.com/archives/870

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。