Scrapy简介
Scrapy是一个为了爬取网站数据、提取结构性数据而完全由python编写的应用框架。
所谓“框架”,便是整个或部分系统的可重用设计。在python中也可以说,一个框架就是一个可复用的“巨大模块”。
我们借助Scrapy框架这个爬虫利器,只需根据自己的需要,编写几个专属的模块就可以轻松地实现一个爬虫项目,例如抓取网页的内容或图片等,极为方便。
Scrapys实现了底层多线程请求,它使用Twisted异步网络框架来处理网络通讯。
这使得Scrapy可以为我们加快下载速度,而不用我们自己去实现多线程异步爬取,并且Scrapy中包含了各种中间件接口,使我们可以灵活的完成各种需求。
Scrapy的安装
(1)Windows安装(以win7为例):
在CMD命令行模式下,直接通过pip命令:pipinstallScrapy安装Scrapy框架。
没有安装Microsoftvisualc++14.0的伙伴们在安装Scrapy时,会遇到“Microsoftvisualc++14.0isrequired”的错误提示信息。
解决办法:我们先到python的扩展库网站上,下载twisted对应版本的whl文件。
我们在python扩展库网站中往下滑动,寻找twisted文件。
其中Twisted的whl文件名中cp的数字表示python版本,amd64代表是64位python,win32代表着32位python。
例如“Twisted18.4.0cp36cp36mwin32.whl”代表着这个文件的Twisted对应的是3.6版本的32位的python。
不知道自己python版本和位数的伙伴们,可以在cmd中输入python,即可看到对应的版本号和位数。
注意:一定要下载对应版本和位数的Twisted文件。
下载完成后,执行命令:“pip+install+路径+Twisted文件名”对Twisted进行安装。例如,小叮当下载的是“Twisted18.4.0cp36cp36mwin32.whl”下载后存放的位置是H盘。那么小叮当就在cmd中执行如下的命令:pipinstallH:\Twisted-18.4.0-cp36-cp36m-win32.whl
Twisted成功安装后,再次执行命令:pipinstallscrapy安装Scrapy框架。
运行后可以看到,此时Scrapy已成功安装,没有了“Microsoftvisualc++14.0isrequired”的错误提示。
(2)Linux安装(以Centos7为例)
直接在终端中输入:sudopipinstallscrapy
即可成功安装Scrapy框架。
Scrapy的架构解析
Scrapy共有7大架构,它们是Spider(爬虫)、SpiderMiddlewares(爬虫中间件)、ScrapyEngine(引擎)、Scheduler(调度器)、DownloaderMiddlewares(下载中间件)、Downloader(下载器)、ItemPipeline(管道)。
(1)Spider(爬虫)
它负责处理所有Responses(网站的响应)从中分析提取数据,获取Item字段需要的数据,并将需要访问的URL提交给引擎,再次进入Scheduler(调度器)。
(2)SpiderMiddlewares(爬虫中间件)
可以理解为是一个可以自定义扩展并和操作引擎通信或是和Spider通信的“桥梁功能组件”。(通过爬虫中间件我们可以自定义进入Spider的Responses,也可以自定义从Spider出去的Requests)
(3)ScrapyEngine(引擎)
负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。
(4)Scheduler(调度器)
它负责接收引擎发送过来的Request请求,并按照一定的方式进行整理排列、入队。当引擎需要时,便把这些请求交还给引擎,类似于调度车辆的“交警”。
(5)DownloaderMiddlewares(下载中间件)
可以理解为一个可以自定义扩展下载功能的组件,例如自定义下载的方式、下载数据的选取、存储等功能。类似于一个可以给下载器下达命令的“传令兵”。
(6)Downloader(下载器)
负责下载ScrapyEngine(引擎)发送的所有Requests请求,并将其获取到的Responses(响应)交还给ScrapyEngine(引擎),再由引擎交给Spider来处理。
(7)ItemPipeline(管道)
管道负责处理从Spider中获取到的Item,是进行后期的处理的地方。(例如进行详细分析、过滤、存储等)
Scrapy运行流程
(1)我们通过Scrapy创建爬虫
(2)爬虫请求通过爬虫中间件传递给了引擎
(3)引擎将爬虫请求传给调度器入列
(4)调度器进行调度选择合适的请求通过下载中间件发给下载器
(5)下载器根据爬虫请求从网络上下载数据,并将网络的响应返回给引擎
(6)引擎将下载器传回的网络响应通过爬虫中间件反馈给爬虫
(7)爬虫从网络响应中分析提取Item所需的数据,并通过爬虫中间件交给引擎
(8)引擎将爬虫提取后的item数据传给管道进行数据存储。