2 爬虫相关技术
2.1 scrapy网络爬虫框架
对网络爬虫的技术研究目前来说发展的已经比较成熟,想要实现对特定论坛指定内容的爬取一般需要经过定制。Scrapy是一款基于Twisted的异步处理数据的网络爬虫框架,全部编码都由Python完成,因为Python的特性—使编程简单化,所以scrapy对使修改来说仅需定制某几个模块的部分代码即可以轻松创建一个用户自己的爬虫,用来抓取网页上你所需要的信息。本文采用scrapy作为论坛数据提取的定制爬虫。本节将重点介绍scrapy框架。
2.1.1 scrapy组成
Scrapy是一个为了方便普通编程人员爬取网站数据提取结构性数据而编写的应用框架。它用途多样,从数据挖掘到自动化测试,如今已有很多企业采用scrapy作为其工作软件。Scrapy是基于Twisted,编程语言使用的是纯Python。虽然Scrapy所使用的开发方法很简单,但提供了几乎其他任何网络爬虫所需的所有特性。对开发人员只需花很少的时间和精力来学习这个框架。应为是采用Python语言编写的,所以其具备很好的可移植性,不需要做任何修改它就可以成功运行在window、Linux、MacOS等各个平台上。
Scrapy的组成部分包括引擎(scrapy engine)、调度器(scheduler)、蜘蛛(spider)、数据处理流水线(item pipeline)和下载器(downloader)五个部分。另外还有为改善爬虫性能说需的各种中间件。这五个部分详细功能如下:
1. scrapy引擎(scrapy engine)
引擎是整个scrapy系统的控制中心、大脑和心脏。scrapy系统的数据事务处理、处理流程、接收响应其他各个模块的请求都由它来控制。
2. 调度器(scheduler)
调度器是一个队列用来记录并文护一个爬取优先级的,其记录着爬虫在下一个爬取操作时要爬取的网页的URL,它的运行逻辑是从引擎接收请求并记入待爬取队列,并在引擎提出爬取请求后返回页面URL。这个队列每个爬虫拥有一个,不同的爬虫间不可共享,也不可保存,当程序结束后,队列里信息也同时消失。
3. 蜘蛛(spider)
蜘蛛模块规定爬取的动作和所爬取的内容,并通过预设算法抽取需进一步爬取的链接,本模块需用户自己编写,用户定义特定网页的抓取与解析规则来指导蜘蛛去处理的用户指定的一个或一组域名。其处理流程为:从start_urls队列获取所需爬取的第一个网页的初始请求,当请求被响应后调用指定回调函数来处理页面。第一个请求是通过调用蜘蛛的start_requests()方法生成的。蜘蛛分析出的结果分为两类:一是需继续抓取的链接;另一种是用户指定的需要处理的数据,两种结果可以混在同一个结果列表中返回将数据封装成item,请求链接则是request类型,request会再次转发给调度器进行下一步,及重复上步。
4. 数据处理流水线(item pipeline)
数据处理流水线存储、分析、过滤数据。他是一整套针对数据流水操作。数据操作由用户自己定义,还可以在setting文件中设置处理模块的优先级。通常其所负担的工作有:数据的清洗、去重、存储等等。
5. 下载器(downloader)
下载器的作用是从scrapy引擎处获取需要下载的URL,并向网站所在的服务器发送请求并将网页下载。因网页的传输协议不一样,如http和FTP等,此时需借助下载中间件来实现。
6. 中间件(Middlewares)
顾名思义中间件就是位于个模块之间的小模块,主要用来解决scrapy引擎与各模块之间的请求及响应。这是scrapy为了满足不同用户不同的需求,允许用户自定义模块来扩展scrapy功能。Scrapy的中间件有下载中间件,调度中间件等。如HttpProxyMiddleware—Http代理。 Python针对社区论坛BBS的网络爬虫系统设计(4):http://www.youerw.com/jisuanji/lunwen_23857.html