Python在网络爬虫中还有个很知名的库,叫做Scrapy.继续学习!
本小结,我们先来了解一下Scrapy的工作原理。
为什么要用Scrapy?
自己手写爬虫需要考虑很多的技术细节,比如下载器,解析器等;且容易出问题。
scrapy能帮助我们非常容易地创建一个大的爬虫项目
scrapy内置非常好用的selectors用来抽取数据(extract data) — xpath,css
scrapy速度快 (使用了异步请求技术)----scrapy采用twisted网络库
scrapy提供了自适应限制速度和反爬策略
scrapy通过配置文件,非常容易地控制爬虫
1 定义
Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构
化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy是一个为遍历爬行网站、分解获取数据而设计的应用程序框架,它可以应用在广泛领域:数据挖掘、信
息处理和或者历史片(历史记录)打包等等
官方网站:http://scrapy.org
2 安装
scrapy框架的安装依赖于异步网络库twisted,安装过程很简单。
进入到python虚拟环境下:
pip install Scrapy
3 Scrapy工作原理
Scrapy框架主要由六大组件组成,它们分别是调试器(Scheduler)、下载器(Downloader)、爬虫(Spider)、
中间件(Middleware)、实体管道(Item Pipeline)和Scrapy引擎(Scrapy Engine)
3.1 Scrapy组件图
下面的图表显示了Scrapy架构组件:
组件说明:
(1)Scrapy Engine
引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。
(2)调度器(Scheduler)
调度器从引擎接受request对象,并将他们入队列,以便之后引擎请求他们时提供给引擎。
(3)下载器(Downloader)
下载器负责获取页面数据并提供给引擎,而后提供给spiders。
(4)Spiders
Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责
处理一个特定(或一些)网站。 更多内容请看 Spiders 。
(5)Item Pipeline
Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。 更多
内容查看 Item Pipeline。
(6)下载器中间件(Downloader middlewares)
下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response(也包括
引擎传递给下载器的Request)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。更多内容请看
下载器中间件(Downloader Middleware) 。
一句话总结就是:处理下载请求部分
(7)Spider中间件(Spider middlewares)
Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及
requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
3.2. scrapy数据流图
数据流程图如下:
Scrapy数据流图是由执行的核心引擎(engine)控制,流程是这样的:
1、爬虫引擎获得初始请求开始抓取。
2、爬虫引擎开始请求调度程序,并准备对下一次的请求进行抓取。
3、爬虫调度器返回下一个请求给爬虫引擎。
4、引擎请求发送到下载器,通过下载中间件下载网络数据。
5、一旦下载器完成页面下载,将下载结果返回给爬虫引擎。
6、引擎将下载器的响应通过中间件返回给爬虫进行处理。
7、爬虫处理响应,并通过中间件返回处理后的items,以及新的请求给引擎。
8、引擎发送处理后的items到项目管道,然后把处理结果返回给调度器,调度器计划处理下一个请求抓取。
9、重复该过程(继续步骤1),直到爬取完所有的url请求。
以上是Scrapy的工作原理,下一节我们上代码实战。敬请期待...