垂直型爬虫架构设计(2)

回复 星标
更多
垂直型爬虫架构设计(2)
.
.
.
.
.
.

上文提到了关于爬虫的一些简单概念与爬虫真正要做的一些功能。简单的分析了一下垂直型爬虫与宽度(深度)遍历的一些特点。现在,我主要针对于垂直型爬虫的架构设计做一些简单的介绍。

垂直型爬虫的基本需求

目前企业级所需的基本上是垂直型爬虫。舆情分析,财经资讯资讯推荐等。基本山使用的都是垂直型爬虫来作为企业级使用的方案,企业级爬虫的特点我上篇博客里面已经讲过了,所以在做垂直型爬虫架构的时候只需要考虑抓去内容所需的功能。简单来说:拿到某篇资讯所需的方式或功能。例如:常见的javascript方式,ajax等。

简单来列举一些我在抓去数据时所遇到的一些问题:

1.javascript调用正文

2.ajax方式获取正文

3.iframe方式

4.验证码

5.javascript调用下一页连接

6.javascript+post方式获取下一页连接

7.ajax方式获取内容

8.登录

...

这些都是需要在设计爬虫之初就要考虑的问题,虽然简单来说爬虫就是获取到需求所需的数据,但是很多时候数据的获取也不是那么简单的。所以框架的整体设计是非常关键的,甚至对于爬虫之后版本的发展都很重要,如果框架设计的不合理,发现新的问题就需要重新构建爬虫或者直接针对遇到的问题设计爬虫。这两种方式都不是可取的。

垂直型爬虫框架

之前提到,垂直型爬虫抓去数据所需的链接发现-链接管理-链接下载。那么即可根据这三块把爬虫暂时划分为三个小的模块。

1.链接解析

那么链接发现简单来说就是把一个页面下载完成之后根据一定的规则来获取到所需的链接.如 xpath方式,dom方式等.比较常用的是xpath,java方向的解析包有Jsoup等.来解析内容.当然,远远没有那么简单,仅仅是jsoup来解析肯定是不够的.但是我们最终要实现的就是从一个页面里面获取到想要继续下载链接.那么这个肯定是需要放在链接下载模块之后.链接下载完成之后解析新的链接(别告诉我没有链接咋下载,刚开始都要写个入口url的.例如http://www.baidu.com/search/url_submit.htm百度的链接提交,就是让爬虫去抓这个页面)

2.链接下载

好吧,这块才是整个爬虫的重点.非常重要的地方,首先要求下载正确的内容,如:正文隐藏在iframe中,正文是javascript调用的,正文是需要转码的等等.当然正常的网站还是很多的,简单的我们只是需要正常的页面打开方式获取就可以了.如httpClient,HtmlParser,甚至直接使用Jsoup都能够获取到内容.

Jsoup.connect();

当然,这样获取到的内容是源文件,没有javascript解析等.但是至少,我们已经成功获取到了网页内容.虽然简单,但是是获取成功了.好吧,下载模块算是可以实现.那么我们简单来考虑一下,链接下载跟链接发现的步骤可以是:我们输入一个url,链接下载模块把链接下载下来,之后再去解析模块解析出来我们要继续下载的链接,可以根据xpath、dom等方式提取出我们所需要的,垃圾链接,广告链接,无用的链接剔除。然后加入到链接管理模块。

当然,这样获取到的内容是源文件,没有javascript解析等.但是至少,我们已经成功获取到了网页内容.虽然简单,但是是获取成功了.好吧,下载模块算是可以实现.那么我们简单来考虑一下,链接下载跟链接发现的步骤可以是:我们输入一个url,链接下载模块把链接下载下来,之后再去解析模块解析出来我们要继续下载的链接,可以根据xpath、dom等方式提取出我们所需要的,垃圾链接,广告链接,无用的链接剔除。然后加入到链接管理模块。

3.链接管理

链接管理模块在整个垂直型爬虫项目中是非常重要的,效率,准确等是非常关键的因素。当爬虫开始抓取时,爬虫生命周期中所接触下载的所有链接都需要被链接管理模块所管理,简单的有生命周期版与持久化版本。链接管理所需要实现的功能:去重、判断

去重之前已经说过了,如果在生命周期中不进行链接去重,则有可能会让爬虫死在这个网站中...一直循环抓去页面,无法退出。那么去重就是需要首先考虑的问题。能够让爬虫在抓取中判断获取到的新url是否之前抓过,是否需要下次抓取。

判断就是业务性的了,判断这个url是否需要再次抓取. 如某个重点网站,在抓取之后发现该链接是否还要抓取, 又或者一个非重点网站,更新频率较低.是否抓取到该网站时,放弃本次抓去,把资源让给更新频率较高的网站等。那么这样链接管理就是需要在获取到该链接的第一时间去去重、判断。好吧,那就是链接发现之后获取到的新链接加入到链接管理模块中。

这么来看,我们的爬虫基本架构就出来了:

链接发现——链接管理——链接下载——链接发现——循环一圈

(不会画图,希望各位理解!)

华丽的分隔线

相关文章:垂直型爬虫架构设计(1)

原文地址:http://my.oschina.net/CainGao/blog/506492

2015-09-16 13:49:44更新过
新窗口打开 关闭