欢迎来到安联智库seczk.com--做最好网安新媒体!!
快捷搜索:  热点  资讯  事件  漏洞  技术  攻防  

网安知识之网络爬虫原理解析及实例

 

在万维网飞速发展的网络背景下,搜索引擎在人们的生活工作中无疑扮演着重要的角色,而网络爬虫则是搜索引擎技术的最基础部分。


一、网络爬虫概述


网络爬虫又叫网络蜘蛛(Web Spider),是一个很形象的名字。把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。网络蜘蛛是通过网页的链接地址来寻找网页,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。如果把整个互联网当成一个网站,那么网络蜘蛛就可以用这个原理把互联网上所有的网页都抓取下来。


对于搜索引擎来说,要抓取互联网上所有的网页几乎是不可能的,从目前公布的数据来看,容量最大的搜索引擎也不过是抓取了整个网页数量的百分之四十左右。这其中的原因一方面是抓取技术的瓶颈,无法遍历所有的网页,有许多网页无法从其它网页的链接中找到;另一个原因是存储技术和处理技术的问题,如果按照每个页面的平均大小为20K计算(包含图片),100亿网页的容量是100×2000G字节,即使能够存储,下载也存在问题(按照一台机器每秒下载 20K计算,需要340台机器不停的下载一年时间,才能把所有网页下载完毕)。同时,由于数据量太大,在提供搜索时也会有效率方面的影响。因此,许多搜索引擎的网络蜘蛛只是抓取那些重要的网页,而在抓取的时候评价重要性主要的依据是某个网页的链接深度。


网络爬虫作为一个自动提取网页的程序,它为搜索引擎从Internet网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止,另外,所有被爬虫抓取的网页将会被系统存贮,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。


相对于通用网络爬虫,聚焦爬虫还需要解决三个主要问题:

  (1) 对抓取目标的描述或定义;

  (2) 对网页或数据的分析与过滤;

  (3) 对URL的搜索策略。


二、网页搜索策略


网页的抓取策略可以分为深度优先、广度优先和最佳优先三种:

  a:深度优先的策略(Depth-First Traversal)

  深度优先的遍历策略类似家族继承策略,典型的如封建帝王的继承,通常为长子,如果长子去世,长孙的优先级大于次子的优先级(这点大家多多仔细分析琢磨下),如果长子和长孙都已经去世,那么次子继承,这种继承上的优先关系也称深度优先策略。(从这点上我们可以了解到蜘蛛的抓取栏目页先后顺序)

  b:广度优先的策略(Breadth-First Traversal)

  广度优先我们又称为宽度优先,或者叫层次优先,例如:我们在给祖辈和父辈还有平辈敬茶的时候先给最年长的祖辈,其次为父辈,最后为平辈,在爬虫抓取上也采取了这样的策略。基于使用宽度有限的策略主要原因有三点:

  1)首页重要的网页往往离种子比较近,例如我们打开新闻站的时候往往是最热门的新闻,随着不断的深入冲浪,PV值增加,所看到网页重要性越来越低。

  2)万维网的实际深度最多能达到17层,到达某个网页的路径深入很多,但是总存在一条很短的路径。

  3)宽度优先有利于多爬虫的合作抓取,多爬虫合作通常先抓取站内连接,遇到站外连接然后开始抓取,抓取的封闭性很强。

  c:最佳优先搜索(Best First Search),是一种启发式搜索算法(Heuristic Algorithm),我们也可以将它看做广度优先搜索算法的一种改进;最佳优先搜索算法在广度优先搜索的基础上,用启发估价函数对将要被遍历到的点进行估价,然后选择代价小的进行遍历,直到找到目标节点或者遍历完所有点,算法结束。


深度优先在很多情况下会导致爬虫的陷入(trapped)问题,目前常见的是广度优先和最佳优先方法。


三、爬虫实例


3.1 Heritrix


Heritrix是一个爬虫框架,可以加入一些可互换的组件。Heritrix是用来获取完整精确的网站内容的爬虫,除文本内容之外,它还获取其他非文本内容(如图片等)并对其进行处理,且不对网页内容进行修改。当重复爬行相同URL时,不会对先前网页进行替换。


Heritrix主要有以下几步:

  1)在预定的URL中选择一个并获取。

  2)分析,并将结果归档。

  3)选择已经发现的感兴趣的URL,加入运行队列。

  4)标记已经处理过的URL


Heritrix利用广度优先策略来进行网页获取,其主要部件都具有高效性和可扩展性。然而Heritrix也有其一定的局限性,如:

  只支持单线程爬虫,多爬虫之间不能合作;

  操作复杂,对有限的资源来说是一个问题;

  在硬件是系统失败时,其恢复能力较差等等。


3.2 Nutch


Nutch深度遍历网站资源,将这些资源抓取到本地,使用的方法都是分析网站每一个有效的URL并向服务器端提交请求来获得相应结果,生成本地文件及相应的日志信息等。


Nutch与Heritrix有几点差异,即:

  1)Nutch只获取并保存可索引的内容。

  2)Nutch 可以修剪内容,或者对内容格式进行转换。

  3)Nutch 保存内容为数据库优化格式,便于以后索引;且对重复URL,刷新替换旧的内容。

  4)Nutch 从命令行运行、控制。

  5)Nutch 的定制能力不够强(不过现在已经有了一定改进)。


3.3 Larbin


Larbin不同于以上两种网络爬虫,它只抓取网页,而不提供包括分析网页、将结果存储到数据库以及建立索引等服务。


Larbin的目的是对页面上的URL进行扩展性的抓取,为搜索引擎提供广泛的数据来源。虽然工作能力较为单一,但Larbin胜在其高度可配置性和良好的工作效率(一个简单的larbin的爬虫可以每天获取500万的网页),这也是Larbin最初的设计理念。


3.4 Lucene


Lucene 是一个基于Java的全文信息检索工具包,它本身不是一个完整的全文索引应用程序,而是为各种应用程序提供索引和搜索功能。只要能把要索引的数据转化的文本格式,Lucene 就能对该文档进行索引和搜索。


Lucene采用的是一种称为反向索引(inverted index)的方法。因此,在用户输入查询条件的时候,Lucebne能非常快地得到搜索结果。


对文档建立好索引后,搜索引擎首先会对关键词进行解析,然后在建立好的索引上面进行查找并返回和用户输入的关键词相关联的文档。


四、总结


在如今信息爆炸的社会中,网络成为人们生活中不可或缺的工具,而搜索引擎又在这其中扮演者至关重要的角色。搜索引擎是一个实用性很强的研究领域,无论是网络爬虫、数据库管理、中文分词还是索引的建立方法,都值得我们去深入了解。


搜索引擎技术已成为如今的热门学科之一,针对搜索引擎而产生的SEO(搜索引擎优化)也已成为主流。对于网站来说,被搜索引擎索引是必要的,但近年来,随着良莠不齐的各类爬虫频繁出没,一些网站也承受着由爬虫带来的困扰。另外,各种针对搜索引擎的作弊也逐渐浮出水面,这些都是今后有待解决的问题。



暂无

您可能还会对下面的文章感兴趣: