冰解的破-Scrapy

冰解的破-Scrapy_第1张图片
scrapy

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和 自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

Scrap,是碎片的意思,这个Python的爬虫框架叫Scrapy。

学习整理:

  • scrapy架构?

先科普下什么是爬虫,爬虫的本质就是将互联网网页(数据)下载下来的程序。


冰解的破-Scrapy_第2张图片
爬虫

通过对互联网无数个url数据的下载,url之间可能又有关联,于是形成了犹如蜘蛛网状的结构,而爬虫就守在这张大网之上,因此我们通常又将爬虫成为蜘蛛。


冰解的破-Scrapy_第3张图片
spider

爬虫的基本结构:


冰解的破-Scrapy_第4张图片
基本爬虫架构

由上图可以看出爬虫一般由爬虫调度器、URL管理器、网页下载器、网页解析器、数据存储这几个模块组成。
  • 爬虫调度器主要是对url管理器、网页下载器网页解析器进行管理。
  • URL管理器主要通过初始url及网页解析器获得的url进行存储管理,并为调度器提供接口,为网页下载器提供下载入口。
  • 网页下载器主要功能就是下载该url下的网页数据(源码)
  • 网页解析器一方面解析出我们需要的价值数据,一方面又将网页下载器下载数据中的url存储到url管理器中。
  • 数据存储是将网页解析器的解析的价值数据存储到内存、数据库、文件等。

scrapy data flow(流程图)


冰解的破-Scrapy_第5张图片
scrapy流程

Scrapy数据流是由执行的核心引擎(engine)控制,流程是这样的:

  1. 爬虫引擎获得初始请求开始抓取。
  2. 爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取。
  3. 爬虫调度器返回下一个请求给爬虫引擎。
  4. 引擎请求发送到下载器,通过下载中间件下载网络数据。
  5. 一旦下载器完成页面下载,将下载结果返回给爬虫引擎。
  6. 引擎将下载器的响应通过中间件返回给爬虫进行处理。
  7. 爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎。
  8. 引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。
  9. 重复该过程(继续步骤1),直到爬取完所有的url请求。

单独介绍下scrapy各个组件:

  • 爬虫引擎(ENGINE)
    爬虫引擎负责控制各个组件之间的数据流,当某些操作触发事件后都是通过engine来处理。
  • 调度器
    调度接收来engine的请求并将请求放入队列中,并通过事件返回给engine。
  • 下载器
    通过engine请求下载网络数据并将结果响应给engine。
  • Spider
    Spider发出请求,并处理engine返回给它下载器响应数据,以items和规则内的数据请求(urls)返回给engine。
  • 管道项目(item pipeline)
    负责处理engine返回spider解析后的数据,并且将数据持久化,例如将数据存入数据库或者文件。
  • 下载中间件
    下载中间件是engine和下载器交互组件,以钩子(插件)的形式存在,可以代替接收请求、处理数据的下载以及将结果响应给engine。
  • spider中间件
    spider中间件是engine和spider之间的交互组件,以钩子(插件)的形式存在,可以代替处理response以及返回给engine items及新的请求集。

scrapy项目结构:


冰解的破-Scrapy_第6张图片
项目结构

参见:
Scrapy爬虫(二):爬虫简介:https://blog.csdn.net/yancey_blog/article/details/53887924
Scrapy爬虫(三):scrapy架构及原理:https://blog.csdn.net/yancey_blog/article/details/53888473

TO BE CONTINUED ......

你可能感兴趣的:(冰解的破-Scrapy)