想学习python的爬虫,除了python的四大经典爬虫模块外,那就不得不说说scrapy了,scrapy简单来说就是为了爬取我们想要的数据而编写的一个应用框架。更专业点的说法是:scrapy是python开发的一个为了爬取网站数据,提取结构性数据而编写的应用框架,可以应用在数据挖掘、信息处理、存储历史数据等一些列的程序中,框架内包含的各种接口,可以让我们灵活的将其应用于各种需求中。 那么,scrapy到底为我们提供了哪些高效的特性来简化我们的工作呢: 对html,xml源数据的选择和提取的支持,提供了selector选择器和Xpath表达式进行处理,使用正则表达式来提取数据。 提供交互式的shell终端,为编写过程中验证部分提取数据提供了便利(selector、xpath) 通过feed为导出的数据提供了多种格式(json、csv、xml),多种存储端(ftp、s3、本地文件系统)的内置支持。 提供一些列在spider之间共享的可复用的过滤器即Item Loaders,内置的服务可以更好的进行智能文件爬取数据。 针对非英语语系中不标准或者错误的编码声明,提供了自动检测以及健壮的编码支持。 具有高扩展性,通过使用signals,使用设计好的API如中间件、extensions、pipelines来实现自己所需的功能。 内置的中间件及扩展可以为cookies and session处理、Http压缩、HTTP认证、HTTP缓存、user-agent、robots.txt等功能提供支持。 内置Telent终端,通过在Scrapy进程中钩入Python终端,使您可以查看并调试爬虫。
网络上最流行的scrapy架构为: 
Scrapy Engine(爬虫引擎):核心部分,用来处理整个系统的数据流。 scheduler(调度器):用来接收引擎发过来的requests,并在引擎再次发来请求的时候,返回信息。 Downloader(下载器):从scheduler处获取目标网页数据,并将数据返回给spider Spiders(蜘蛛):主要用它指定域名和网页的解析规则,并编写用于分析经response返回的item的类以及额外跟进的URL类。每个Spider负责处理相应的网站。 Item Pipeline(项目管道):负责处理spiders提取出来的item,并对其进行验证、存储。 Downloader Middlewares(下载器中间件):位于Scrapy engine和downloader之间的钩子,通过插入自定义的代码,来扩展scrapy的功能,并处理Scrapy引擎与下载器之间的requests和response。 Spider Middlewares(蜘蛛中间件):介于Scrapy engine和spider之间的钩子,主要工作是处理spide的响应输入和请求输出。 Scheduler Middlewares(调度中间件):介于Scrapy engine和scheduler之间的钩子,从Scrapy引擎发送到调度的请求和响应。
整个爬虫的工作流程可简单理解为: 从初始URL开始,Scheduler会将其交给Downloader进行下载, Spider会对Downloader下载下来的数据进行分析。 经Spider的分析有两种结果:如果是需要进一步抓取的链接,则这些东西会被传回Scheduler,;另一种是需要保存的数据,则被送到Item Pipeline那里 经第三步,如果是第一种则再次回到第一步进行。如果是第中则对数据进行后期处理(详细分析、过滤、存储等)。 另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。
而在爬虫的过程中,数据流懂得过程为: 引擎按照给定的初始网址,打开网站,找到处理该网站的Spider并向Spider请求要爬取的第一个网页地址。 引擎获得地址后,使用scheduler进行request。 处理完第一个网址后,引擎向调度器请求下一个目标网址。 scheduler向引擎返回一个新的网址,引擎通过下载中间件将该网址转给downloader。 downloader继续从网络中获取所需数据,下载完成后,返回一个response,携带者这些数据通过下载中间件流向引擎。 引擎将收到的response通过Spider中间件流向Spider,交由Spider处理。 Spider处理这个response并返回爬取到item或者新的request给引擎。 引擎如果收到的是item则将其流向item Pipeline 引擎如果收到的是新的request,则将其发向调度器。 重复上述操作,直至没有新的request,引擎关闭该网站,此次爬取结束。
本期对scrapy的简单介绍就到这里,以后的文章将会从项目入手学习scrapy,如果你对scrapy也感兴趣,可以关注一下以便系统为您继续推荐。谢谢! 编者语:本篇文中中的些许内容是聆听参考网上一些大牛的分享以及scrapy的文档而来,不喜还请勿喷,有误还请指正,谢谢》 |