zoukankan      html  css  js  c++  java
  • 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的理解。

  • 相关阅读:
    nutch 存储到数据库
    66、多种多样的App主界面Tab(1)------ ViewPager实现Tab
    让TextView的drawableLeft与文本一起居中显示
    细说Java多线程之内存可见性
    八、图形与图像处理(2)
    65、TextView 字体设置不同颜色 --- 未完
    64、具有过渡动画效果的布局Layout( 2 )
    63、具有过渡动画效果的布局Layout
    62、常规控件(5)Navigation View –美观的侧滑视图
    61、常规控件(4)TabLayout-便捷实现标签
  • 原文地址:https://www.cnblogs.com/tianyiliang/p/12634652.html
Copyright © 2011-2022 走看看