Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
Scrap,是碎片的意思,这个Python的爬虫框架叫Scrapy。
学习整理:
-
scrapy架构?
先科普下什么是爬虫,爬虫的本质就是将互联网网页(数据)下载下来的程序。
通过对互联网无数个url数据的下载,url之间可能又有关联,于是形成了犹如蜘蛛网状的结构,而爬虫就守在这张大网之上,因此我们通常又将爬虫成为蜘蛛。
爬虫的基本结构:
由上图可以看出爬虫一般由爬虫调度器、URL管理器、网页下载器、网页解析器、数据存储这几个模块组成。
- 爬虫调度器主要是对url管理器、网页下载器网页解析器进行管理。
- URL管理器主要通过初始url及网页解析器获得的url进行存储管理,并为调度器提供接口,为网页下载器提供下载入口。
- 网页下载器主要功能就是下载该url下的网页数据(源码)
- 网页解析器一方面解析出我们需要的价值数据,一方面又将网页下载器下载数据中的url存储到url管理器中。
- 数据存储是将网页解析器的解析的价值数据存储到内存、数据库、文件等。
scrapy data flow(流程图)
Scrapy数据流是由执行的核心引擎(engine)控制,流程是这样的:
- 爬虫引擎获得初始请求开始抓取。
- 爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取。
- 爬虫调度器返回下一个请求给爬虫引擎。
- 引擎请求发送到下载器,通过下载中间件下载网络数据。
- 一旦下载器完成页面下载,将下载结果返回给爬虫引擎。
- 引擎将下载器的响应通过中间件返回给爬虫进行处理。
- 爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎。
- 引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。
- 重复该过程(继续步骤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爬虫(二):爬虫简介:https://blog.csdn.net/yancey_blog/article/details/53887924
Scrapy爬虫(三):scrapy架构及原理:https://blog.csdn.net/yancey_blog/article/details/53888473
TO BE CONTINUED ......