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

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

    1.垂直型爬虫的基本需求java

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

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

        1.javascript调用正文    框架

        2.ajax方式获取正文dom

        3.iframe方式post

        4.验证码网站

        5.javascript调用下一页链接url

        6.javascript+post方式获取下一页链接架构设计

        7.ajax方式获取内容

        8.登陆...

        等.

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

    2.垂直型爬虫框架

        以前提到,垂直型爬虫抓去数据所需的连接发现-连接管理-连接下载。那么便可根据这三块把爬虫暂时划分为三个小的模块。1.连接解析    2.连接管理    3.连接下载.

         连接解析:

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

        连接下载:    

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

Jsoup.connect("();

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

        连接管理:

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

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

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

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

            连接发现---连接管理---连接下载---连接发现-->循环一圈

            (不会画图,但愿各位理解!)

相关文章
相关标签/搜索