2。1。1 python-scrapy爬虫框架
在讲scrapy爬虫框架之前,先对爬虫做一个简单的介绍。所谓网络爬虫,就是在网络中到处或者定向的抓取数据的程序,前者叫通用爬虫,后者叫定向爬虫,这种说法可能还不够专业,更专业的说,就是爬虫在网页中抓取HTML数据,并且将其中的有价值的信息保存下来。不过一个网站会有很多个页面,我们不可能知道所有的网页的URL,所以如何保证抓取到了网站中所有的页面就是一个有待考证的问题了。
一般的方法是定义一个或几个入口地址,然后先抓取这些页面上的信息,然后把这些页面上可以跟进的URL加入一个队列,抓取完成后再从这些队列中继续抓取继续跟进新的URL并且加入队列,如此往复,这种方法就好像深度优先或者广度优先遍历一样[4]。
上面介绍的只是一个简单的爬虫概念,而不是搜索引擎,搜索引擎系统相当复杂,爬虫只是其中的一个子系统,后续还会介绍一些其他的相关爬虫的知识。下面正式开始介绍scrapy开源爬虫框架。
1)概述
Scrapy是一个用 Python 写的 Crawler Framework ,简单轻巧,并且非常方便,并且官网上说已经在实际生产中在使用了,不过现在还没有 Release 版本,可以直接使用他们的 Mercurial 仓库里抓取源码进行安装。
Scrapy 使用 Twisted 这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。整体架构如下图所示:
图2。1 scrapy流程图
其中绿色的线是数据的走向,从初始的URL开始,Scheduler会把它交给downloadr进行下载,下载后的数据会交给Spider进行处理,处理过后的数据有2种,一种是需要跟进的url会回传给Scheduler,还有就是需要保存下来的信息,会交给pipline进行数据的处理分析,并且保存,在数据流动的管道里还可以安装各种中间件。
2)组件
1。scrapy engine
Scrapy引擎可以控制整个系统的数据处理流程,并进行事务处理的触发。
2。Scheduler(调度)
调度程序从Scrapy引擎接受请求并排序列入队列,并在Scrapy引擎发出请求后返还给他们[6]。
3。Downloader(下载器)文献综述
下载器主要负责就是下载网页中的数据,并将数据流传给spider
4。Spider(蜘蛛)
Spider接受Downloader的数据流,并且根据用户定义的规则进行分析处理其中的有用的信息。
蜘蛛整个的抓取流程大概是:先获取入口url的初始请求,当请求返回后调取一个回调函数。最开始的请求是通过调用start_request()方法,该方法默认从start_url队列中生成请求,并且解析请求,执行回调函数。
在回调函数中,你分析网站中的内容,对其进行Xpath分析,beautifulsoup框架是一个很好的选择,对于解析的内容可以返回到pipline中进行保存处理。
5。Item pipline(项目管道)
项目管道的主要功能是接受spider返回的数据,并进行分析处理。每个项目管道组件都是一个单独的python类,他们可以选择接受哪个spider发送过来的数据,你可以把这些数据保存到数据库或者做其他的处理。
6。Downloader middlewares(下载中间件)
下载中间件是一个钩子框架,他作用于Scrapy引擎和下载器,你可以自定义代码来拓宽scrapy的功能,他是响应和处理请求间的钩子框架,非常轻量级,可以让你全局控制scrapy的底层系统。
7。spider middlewares(蜘蛛中间件)
蜘蛛中间件是介入到spider处理机制的钩子框架,可以添加代码来处理发送给 Spiders 的 response 及 spider 产生的 item 和 request。