• scrapy源码解读(一)框架总体结构


    一、前言

    阅读本文的前提是你已经对scrapy有了基本的认识,或是已经使用scrapy写过数据抓取项目。

    二、框架总体结构

    scrapy框架由多个组件组合而成,要采集的数据经过网络响应后返回流过各个组件,经过一些处理(如格式校验,过滤去重,异常数据抛弃),最终保存到指定的文件或数据库中。

    下面是scrapy data flow 图,大家应该不陌生吧。

    scrapy data flow图

    scrapy的数据流由执行引擎控制,各个组件的运行也是有执行引擎调度驱动运行的。

    (1)第1步,确定好我们要采集的网站后,我们会在start_urls或者start_requests方法中构造最初的数据抓取链接。执行引擎ENGINE通过读取SPIDERS模块的start_urls或start_requests方法的初始链接构造成request对象(网络请求对象)。

    (2)第2步,request对象被引擎加入到SCHEDULER调度器的调度队列中,等待被调度。

    (3)第3步,引擎获取一个request对象,并发起网络请求,在请求到达下载器之前,会先经过download middleware(下载器中间件),常见的下载器中间件有代理中间件,重试中间件,请求头中间件。下载中间件负责修改request对象(比如换个请求头,第4步)和处理response对象(比如将请求失败的request对象重新丢到调度器中等待下次的调度,第5步)。DOWNLOADER(下载器)就是负责发起请求并获取网站的响应。

    (4)第6步,引擎获取网站的响应后,交给SPIDERS模块的回调函数去解析数据。第7步,然后引擎获取解析后的数据。第8步,引擎将数据交给ITEM PIPELINES模块处理数据,常见的处理有验证数据格式是否符合要求,数据是否重复,保存数据等。

    以上。

    最后,我们在阅读框架源码的时候也要注意经常去回顾数据流的流向,有助于加深对scrapy的理解。

  • 相关阅读:
    2017区块链七大趋势,概念热炒之后行业如何发展?
    区块链三大方向:比特币,其他公有链和区块链联盟,以及私有链。
    这条消息被许多人忽视,但对房价可能“一剑封喉”!
    世界主要城市名称中英文对照
    2016全球城市竞争力排行榜
    全球城市群Megalopolis
    gawc全球城市
    2016全球资产配置白皮书(附下载)
    160. Intersection of Two Linked Lists
    save change is not permitted
  • 原文地址:https://www.cnblogs.com/tianyiliang/p/12634652.html
Copyright © 2020-2023  润新知