网络爬虫介绍

2024-05-30

网络爬虫介绍(精选5篇)

篇1:网络爬虫介绍

网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定的规则自动抓取万维网资源的程序或者脚本,已被广泛应用于互联网领域

网络爬虫概述

网络爬虫(Web Crawler),又称网络蜘蛛(Web Spider)或网络机器人(Web Robot),是一种按照一定的规则自动抓取万维网资源的程序或者脚本,已被广泛应用于互联网领域,搜索引擎使用网络爬虫抓取Web网页、文档甚至图片、音频、视频等资源,通过相应的索引技术组织这些信息,提供给搜索用户进行查询。随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。不断优化的网络爬虫技术正在有效地应对这种挑战,为高效搜索用户关注的特定领域与主题提供了有力支撑。网络爬虫也为中小站点的推广提供了有效的途径,网站针对搜索引擎爬虫的优化曾风靡一时。

传统网络爬虫从一个或若干个初始网页的URL(Universal Resource Locator统一资源定位符)开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定条件停止抓取。现阶段网络爬虫已发展为涵盖网页数据抽取、机器学习、数据挖掘、语义理解等多种方法综合应用的智能工具。

网络爬虫的安全性问题

由于网络爬虫的策略是尽可能多的“爬过”网站中的高价值信息,会根据特定策略尽可能多的访问页面,占用网络带宽并增加Web服务器的处理开销,不少小型站点的站长发现当网络爬虫光顾的时候,访问流量将会有明显的增长。恶意用户可以利用爬虫程序对Web站点发动DoS攻击,使Web服务在大量爬虫程序的暴力访问下,资源耗尽而不能提供正常服务。恶意用户还可能通过网络爬虫抓取各种敏感资料用于不正当用途,主要表现在以下几个方面:

1)搜索目录列表

互联网中的许多Web服务器在客户端请求该站点中某个没有默认页面的目录时,会返回一个目录列表。该目录列表通常包括可供用户点击的目录和文件链接,通过这些链接可以访问下一层目录及当前目录中的文件。因而通过抓取目录列表,恶意用户往往可获取大量有用的资料,包括站点的目录结构、敏感文件以及Web服务器设计架构及配置信息等等,比如程序使用的配置文件、日志文件、密码文件、数据库文件等,都有可能被网络爬虫抓取。这些信息可以作为挑选攻击目标或者直接入侵站点的重要资料。

2)搜索测试页面、手册文档、样本程序及可能存在的缺陷程序

大多数Web服务器软件附带了测试页面、帮助文档、样本程序及调试用后门程序等。这些文件往往会泄漏大量的系统信息甚至提供绕过认证直接访问Web服务数据的方法,成为恶意用户分析攻击Web服务器的有效情报来源。而且这些文件的存在本身也暗示网站中存在潜在的安全漏洞。

3)搜索管理员登录页面

许多网络产品提供了基于Web的管理接口,允许管理员在互联网中对其进行远程管理与控制。如果管理员疏于防范,没有修改网络产品默认的管理员名及密码,一旦其管理员登录页面被恶意用户搜索到,网络安全将面临极大的威胁。

4)搜索互联网用户的个人资料

互联网用户的个人资料包括姓名、身份证号、电话、Email地址、QQ号、通信地址等个人信息,恶意用户获取后容易利用社会工程学实施攻击或诈骗。

因此,采取适当的措施限制网络爬虫的访问权限,向网络爬虫开放网站希望推广的页面,屏蔽比较敏感的页面,对于保持网站的安全运行、保护用户的隐私是极其重要的。

基于网络爬虫技术的Web漏洞扫描

前面提到的网络爬虫对网站的间接安全威胁,是通过对网络站点的信息收集为不法份子的非法访问、攻击或诈骗作准备。随着安全技术的发展,利用网络爬虫技术对Web漏洞的直接探测已经出现,这会直接影响到Web服务器的安全。Web服务器漏洞中,跨站脚本(Cross Site Script)漏洞与SQL注入(SQL Injection)漏洞所占比例很高,这两种漏洞均可以通过对网络爬虫的改进来进行探测。由于缺乏足够的安全知识,相当多的程序员在编写Web应用程序时对网页的请求内容缺乏足够的检查,使得不少Web应用程序存在安全隐患,

用户可以通过提交一段精心构造的包含SQL语句或脚本的URL请求,根据程序的返回结果获得有关的敏感信息甚至直接修改后台数据。基于目前的安全现状,网络爬虫技术在Web漏洞扫描上的应用,大大提高了发现漏洞的效率。

基于网络爬虫技术的Web漏洞扫描大至分为如下过程:

1)页面过滤:通过自动化的程序抓取网站页面,对包含

等标签的Web页面进行URL提取处理,这些HTML标签中包含URL信息,便于恶意用户进行更深入的Web访问或提交操作。

2)URL匹配:对Web页面中的URL进行自动匹配,提取由参数组合而成的动态查询URL或提交URL,进行下一步的漏洞探测。如动态查询URL“baike.xxxx.com/searchword/?word=frameset&pic=1”,其中 frameset为URL中动态的参数部分,可以进行参数变换。提交URL用于把Web用户的输入提交到服务器进行处理,其参数多为用户输入,同样可以进行参数变换。

3)漏洞试探:根据动态查询URL或提交URL,自动在参数部分进行参数变换,插入引号、分号(SQL注入对其敏感)及script标签(XSS对 其敏感)等操作进行试探,并根据Web服务器返回的结果自动判断是否存在漏洞。如“URL匹配”中的动态查询URL可以变换成baike.xxxx.com/searchword/?word= &pic=1进行跨站脚本漏洞探测。

如何应对爬虫的安全威胁

由于网络爬虫带来的安全威胁,不少网站的管理人员都在考虑对爬虫访问进行限制甚至拒绝爬虫访问。实际上,根据网站内容的安全性及敏感性,区别对待爬 虫是比较理想的措施。网站的URL组织应该根据是否为适合大范围公开,设置不同的URL路径,在同一Web页面中既有需要完全公开信息也有敏感信息时,应 通过链接、标签嵌入网页等方式显示敏感内容,另外尽可能把静态页面等经评估安全性较高的页面与安全性较差的动态页面从URL上分开。当限制爬虫时可以针对URL路径的安全性与敏感性对不同种类的爬虫与代理进行限制。

限制爬虫可以通过以下几种方法实现:

1) 设置robots.txt文件

限制爬虫最简单的方法是设置robots.txt文件。robots.txt文件是搜索引擎爬虫访问网站的时候要查看的第一个文件,它告诉爬虫程序在服务器上什么文件是可以被查看的,如设置Disallow: /,则表示所有的路径均不能查看。遗憾的是并不是所有的搜索引擎爬虫会遵守这个规则,因此仅仅设置robots文件是不够的。

2) User Agent识别与限制

要对不理会robots.txt文件的爬虫访问进行限制,首先要把爬虫流量与普通用户的访问流量进行区分,即对其进行识别。一般的爬虫程序都可以通过其HTTP请求中的User Agent字段进行识别,该字段使服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。爬虫的User Agent字段一般与浏览器的有所不同,如Google搜索引擎爬虫User Agent字段中会有类似Googlebot的字符串,如User-Agent: Googlebot/2.1 ( www.google.com/bot.html),百度搜索引擎爬虫则会有类似Baiduspider的字符串。不少Web服务器软件如Apache,可以设置通过User Agent字段进行访问过滤,可以比较有效的限制大部分爬虫的访问。

3) 通过访问行为特征识别与限制

对于在HTTP请求的User Agent字段刻意伪装成浏览器的爬虫,可以通过其访问行为特征进行识别。爬虫程序的访问一般是有规律性的频率比较高,区别于真实用户浏览时的随意性与低 频率。对这类爬虫的限制原理与DDoS攻击的防御原理很相似,都基于统计数据。对于这类爬虫的限制只能通过应用识别设备、IPS等能够做深度识别的网络设 备来实现。用网络设备限制网络爬虫,不仅比较全面,而且非常适合在多服务器情况下进行统一的管理,避免多服务器单独管理有可能造成的疏漏。

结束语

网络爬虫及其对应的技术为网站带来了可观访问量的同时,也带来了直接与间接的安全威胁,越来越多的网站开始关注对网络爬虫的限制问题。随着互联网的 高速发展,基于网络爬虫与搜索引擎技术的互联网应用将会越来越多,网站管理员及安全人员,有必要了解爬虫的原理及限制方法,准备好应对各种各样的网络爬虫

TechTarget中国

篇2:网络爬虫的设计与实现

关键词:Webcrawler,广度优先爬取,多线程,DNS缓存,url判重

Web爬虫有两种爬取策略:BFS(广度优先)和DFS(深度优先)爬取策略。广度优先搜索策略是指在抓取过程中,在完成当前层次的搜索后,才进行下一层次的搜索。该算法的设计和实现相对简单。在目前为覆盖尽可能多的网页,一般使用广度优先搜索方法。

深度优先搜索策略是网络蜘蛛将会从起始页开始,一个链接一个链接跟踪下去,处理完这条线路之后再转入下一个起始页,继续跟踪链接。我们编写的webcrawler使用广度优先搜索策略。

1 搜索过程概述

Webcrawler维持两个表visitedurl和unvisitedurl表,首先启动webcrawler后从种子文件中读取种子url到unvisitedurl中,然后创建线程,每个线程各自从unvisitedurl表中读取url,然后访问次url网页,并下载次网页,分析网页中的链接,并将没有访问过并还没有添加到unvisitedurl表中的链接添加到unvisitedurl表中。

2 url判重

当分析出一个网页的链接时,我们必须判断这个链接是否已经被访问过了,或者它是否已经被添加到unvisitedurl表中了。如果发现次链接既没有在visitedurl表中,又没有在unvisitedurl表中,我们就把此链接添加到unvisitedurl表中,否则把此链接丢弃。但是unvisitedurl和visitedurl表中链接往往会非常多,如果通过遍历的方法判断是否重复,耗时会很多,所以我们判断链接是否在unvisitedurl和visitedurl表中的方法是:另外维持两个表,一个是访问过的链接的MD5值的索引表visitedurl MD5,另一个是待访问的链接的MD5值的索引表unvisitedurl MD5,这样每次分析出网页的一个链接后,就计算它的MD值,然后看它的MD5值是否在visitedurl MD5和unvisitedurl MD5中,如果不在,就将链接添加到unvisitedurl表中,并把链接的MD5值添加到unvisitedurl MD5表中,否则,丢弃。这样就可以做到O(1)时间复杂度的链接判重。

3 DNS缓存

URL数以亿计,而主机数以百万计。如果没有DNS缓存,每次搜集新的URL,即使刚在上一次的任务中解析过该主机名,也要重新进行域名解析,除了用IP地址直接表示的主机。为了避免频繁的查询DNS服务器,造成类似于拒绝服务攻击的副作用,要建立DNS缓存。

针对小规模的网页搜集(如百万量级),DNS缓存只需要建立在内存中就够了,一是因为内存占用不多,二是因为域名解析有时效性,即使把这些解析出的信息保存到外存上,过几天也失去了意义。如果是为亿量级服务的Web信息搜集模块,要考虑单独建立为系统服务的DNS模块,这样能够既加快网页信息的获取,又进一步降低对DNS服务器的压力。

4 IP范围控制

需要IP范围控制的原因:

有些站点不希望搜集程序搜走自己的资源。比如很多建设在大学范围内的论文检索系统,通常只是对学校IP范围内开放的。如果搜集程序处于允许检索IP范围内,搜集了这些资源,然后提供服务,就有可能使非授权用户看到了论文信息。

针对特定信息的搜索,比如:校园网搜索,新闻网站搜索。

网络资费方式也会对搜集策略产生影响。有的网络基础设施提供商可能会规定在对不同IP范围信息的访问采用不同的资费政策,因此从运行成本考虑,也可能需要对IP范围进行控制。

我们的策略:

我们将允许访问的IP范围保存到一个文件中,格式为:IP+(~mask),举例:如果一个c类网络202.117.1.255/24在允许的IP访问范围内,我们可以这样写:0.0.0.255。为什么写成0.0.0.255而不是255.255.255.0完全是为了编程的方便需要。每次webcrawler开始爬取前都先将IP允许访问范围读到一个map中,然后从每次从unvisitedurl中取出一个待访问的url后,我们都跟map中保存的IP访问范围比对,如果在其中就可以访问url对应的网页,否则丢弃此url。

5 网页过滤

并不是所有的网页都要访问下载,我们只爬取静态网页。所以我们的网页过滤策略是:先获得网页的消息头,网页头信息获取后,进行解析,根据返回码,判断Web服务器是否正常;根据传输类型,网页体的大小,申请内存空间准备接收,如果超出预定接收大小的最大值(我们设置为5MB大小),放弃该网页;根据网页类型(我们过滤的是content-type为text/html和text/plain格式的网页),判断是否获取该网页。如果满足获取条件,继续进行网页体信息的获取。

6 多线程并发

程序采用了多线程的方法来提高爬取性能(性能的提高将在后面的试验中讨论)。其中多线程共享的是待访问队列和其MD5值索引表,还有已访问队列和其MD5值索引表。每个线程单独处理网页的抓取,下载,分析链接工作,提高了webcrawler的并发度。

7 试验结果

试验过程说明

程序运行方式:

./Spider seed.file ipbloc.file 10

程序运行有三个参数,其中第一个是种子文件名,第二个IP范围控制文件名,第三个参数是开的线程数。

我们试验中只爬取一个xjtunews网站的网页,所以:

我们的种子文件中只添加了一个url,如图1。

我们ipblock文件的内容如图2。

我们将下载的网页放到download文件夹中,并通过设置不同的线程数参数来观察webcrawler性能的改善。

8 数据结果分析

当开一个线程来爬取xjtunews网站时,我们得到如图3的统计信息。

当开10个线程时的统计数据如图4。

当开50个线程时的统计数据如图5。

从试验结果中我们看到:当webcrawler开一个线程爬取网页时,平均每10秒才能完成一个网页的处理工作,当webcrawler有10个线程并发爬取时,平均每秒访问一个网页;当线程数开到50时,平均每秒处理5个网页。性能随线程数增大而提高。

9 进一步工作

仅仅只实现了一个webcrawler的原型,还有几点问题没有编码实现:

a)我们没有考虑到web crawler是否对同一个web服务过多线程和过频的访问情况,也没有理睬网站中的robots文件。

解决方案:访问一个网站前先读取它的robots文件。

b)对网页判重有待改进。我们仅仅是通过url来简单判断是否是重复的网页,没有考虑到有些url可能不同,但网页内容相同或相似的情况。

解决方案:对每一个网页提取前256字符做摘要,并取其MD5值,判重。

c)DNS域名的查询我们使用linux下gethostbyname函数,此函数是阻塞的,当域名没法立刻解析时会导致线程长时间阻塞。这也是系统性能的一个瓶颈。

解决方案:自己实现DNS域名查询的功能。

10 总结

未来网络爬虫的研究也主要是围绕如何提高链接的准确性,降低计算的时空复杂度,以及增加网络爬虫自适应性,更进一步的的提高系统的性能。

参考文献

[1]刘金红,陆余良.主题网络爬虫研究综述[J].计算机应用研究,2007,24(10):26-29,47.

[2]郑冬冬,崔志明.Deep Web爬虫爬行策略研究[J].计算机工程,2006(17):3154-3158.

[3]Chang K C C,He B,Li C,et al.Structured databases on the web:Observations and implications[C]SIGMOD Record,2004,33(3).

[4]严亚兰.面向动态网页爬行的Crawler架构[J].图书情报知识,2003,(4):51-53.

篇3:网络舆情分析中智能爬虫的设计

1 改善爬虫网络利用率的解决方案

为了解决网络爬虫不能有效利用网络资源的问题,本文在传统爬虫中加入爬虫测速模块,对爬虫的抓取速度进行监控,当爬虫的速度慢下来后,采取相应的措施对爬虫的状态进行修改,从而实现对网络资源的有效利用。具体实现步骤如下:

步骤1:爬虫抓取速度监控

为了对爬虫的网页抓取速度进行监控,首先要对该速度进行定义。影响爬虫的网页抓取速度主要有两个因素,分别是抓取页面的大小和抓取这些页面所耗费的时间[4]。本文将爬虫的网页抓取速度B定义为下面的公式:

在公式(1)中Tij表示对爬虫抓取速度进行监控的时间段,P表示在时间段Tij内爬虫所抓取的总的页面大小。

系统可以设定时间段对爬虫的抓取速度进行监控,当系统检测到爬虫的抓取速度低于正常水平的40%后,系统产生报警。

步骤2:爬行策略更改

当系统产生报警后,就要采取相应的措施进行处理。这些措施主要包括:减少爬虫的线程数;暂停当前爬虫的运行,选择适当的时间继续爬行;更换爬行网站。通过这些策略的更改,可以避开网站的访问高峰,选择网站流量小时再进行网页的抓取,从一定程度上利用了有限的网络资源,加快了爬虫的爬行速度。

2 改善爬虫主题覆盖率的解决方案

网络舆情的产生是不可预知的,无法事先确定它的主题。同时,主题爬虫需要计算抓取的网页与主题的相关度[5],造成爬行速度比较慢。基于这些考虑,本文没有采用主题网络爬虫来抓取网页,而是在传统爬虫中加入主题更改模块,来提高爬虫的主题覆盖率。

当需要抓取关于某个主题的网页信息时,根据该主题的关键词,通过调用现有的搜索引擎(百度、google)搜索到关于该主题的若干网页,然后获得搜索到的这些网页的URL列表,并将其导入到URL队列中,从而实现网络爬虫抓取主题的更改。主题更改模块的具体实现步骤如下:

步骤1:提供主题关键词

提供能够反映该主题特征的关键词,关键词可以是一个,也可以是多个。

步骤2:根据关键词确定搜索引擎返回的搜索结果中第一页对应的URL;

以百度搜索引擎为例,利用关键词确定搜索引擎返回的搜索结果中第一页对应的URL的方法如下:

其中wd的值为%CB%EF%CE%B0%C3%FA%20%BE%C6%BC%DD,这个值是关键词的utf-8编码,pn的值为0,表示这是第一页。

步骤3:获取第一页中与主题相关的URL

与主题相关的URL的获取主要通过对第一页进行解析获得,主要利用正则表达式提取源码中span标签之间的内容。具体的正则表达式如下:(.*?)

步骤4:确定搜索引擎返回的搜索结果中第二页对应的URL

以百度搜索引擎为例,搜索结果通常是每页包含10个相关的URL,利用这一特征,并根据搜索结果中第一页对应的URL便可确定第二页对应的URL。具体实现是,将第一页的URL的pn值设为10。

步骤5:利用和步骤3相同的方法,提取第二页中与主题相关的URL,重复这样的过程,直到获得与主题相关的指定数目的URL。

步骤6:将获取的与主题相关的URL放入爬虫的URL队列中,实现对该主题的爬行。

3 系统设计与测试

基于上述分析,本文给出了爬虫系统的设计方案,如图1所示。该爬虫在传统爬虫的基础上添加了爬虫测速模块和主题更改模块。

系统的具体工作流程如下:

1)启动爬虫

2)读取配置文件

配置文件中主要包括爬虫开启的线程数目、任务列表、爬行时间等配置信息。

3)开始爬行

爬虫根据任务列表,从种子URL开始对网页进行抓取。

(爬虫在抓取网页的同时,对爬虫抓取网页的速度进行监控,当抓取速度低于正常水平的40%时产生报警,此时就要更改爬虫的爬行策略,把新的爬行策略信息写入配置文件,当爬虫处理完该条URL后,根据新的策略进行爬行。

5)主题更改

爬虫在抓取页面后对页面进行解析,提取其中的URL放入URL队列中,并将提取的网页主体内容存入数据库中。在这一过程中,如果网络舆情分析需要某一特定主题的大量网页信息,爬虫根据该主题的关键词调用百度、谷歌等搜索引擎获取关于该主题的URL列表,然后,该URL列表放到URL队列中。

4 系统测试

系统的软硬件环境如下:2G内存,2.66GHzCPU,320G串中硬盘,WindowsXP操作系统。采集的数据来自2011年6月至2011年9月间各主流网站。试验结果表明,传统爬虫在抓取1.2G数据时耗时9800s,而改进后爬虫在抓取相同数量的数据耗时仅耗时4268s,抓取速度有显著的提高。爬虫在对特定主题的网页进行抓取时,主题覆盖率也达到了86%。

5 小结

本文针对现有网络爬虫网络资源利用率不高的现状,并结合网络舆情分析对信息源具有较高的主题覆盖率的要求,在传统爬虫中加入了爬虫测速模块和主题更改模块。试验结果表明,本文提出的这些解决方案对网络舆情分析中的信息收集器进行了一定程度的改善。

摘要:网络爬虫作为舆情分析系统的信息源收集器,其性能的优良直接关系到舆情分析结果的好坏。该文针对舆情分析要求信息源具有较高的主题覆盖率的要求,同时考虑到现有爬虫在有效利用网络资源方面的薄弱现状,在现有爬虫的基础上加入了爬虫测速模块、主题更改模块,为提高爬虫在舆情信息收集中的性能提出了一些解决方法。

关键词:网络舆情,网络爬虫,网络资源,爬虫测速,主题更改

参考文献

[1]金晓鸥.互联网舆情信息获取与分析研究[D].上海:上海交通大学,2008.

[2]张祥.网络舆情分析中智能信息收集器的设计实现[D].武汉:华中科技大学,2008.

[3]尹江.网络爬虫效率瓶颈的分析与解决方案[J].计算机应用研究,2008,28(5):1114-1119.

[4]孟祥乾.一种新的网络爬虫带宽控制策略[J].网络与通信,2008,24(11):76-78.

篇4:简析搜索引擎的网络爬虫技术

网络爬虫也称为“文档抽取系统”, 是构成第三代搜索引擎系统的重要组成部分之一, 主要由文档适配器与信息爬行器组成, 文档适配器能够处理不同类型的文档, 信息爬行器主要进行页面信息的收集工作, 文档抽取子系统首先根据配置文件的约定, 定时产生信息爬行器对分布在网络上的信息节点进行遍历, 然后调用对应的文档适配器来抽取网络文档信息。文档适配器能够抽取的页面文件种类繁多, 能够对各种类型的文档以及多媒体文本信息等。信息爬行器为计算机程序的一个进程或线程, 通常采用并发工作方式, 以便能可能多、周期尽可能短地搜集网络节点的页面信息, 同时还要避免死链接或无效链接。信息爬行器一般采用分布式并行计算技术来提高工作的广度与速度。

2 图的遍历算法

网络爬虫在网络中执行信息收集的过程实际上就是一种图的遍历。图的遍历算法通常有两种方式:即广度优先算法与深度优先算法。下面就具体介绍一下两种算法。

通常深度优先算法使用的数据结构为栈, 通过栈的出入特点进行搜索, 其过程首先从该图的某个顶点或者子图出发, 将所有属于该子图的顶点信息的链接地址 (即URL, Universal Resource Locator) 进行压栈操作, 待所有顶点都操作完成后, 然后将栈顶的元素取出, 根据该元素的URL, 访问该元素URL所指向的网络, 然后将该页面的信息进行收集与分析, 从而得到该页面内部的所有的URL连接信息, 再将该页面所有的连接信息进行压栈, 从而按照图的广度将图上所有的链接进行展开操作, 重复这些步骤就可以对图进行深度搜索遍历, 达到遍历收集所有互联网信息资源的目的。

深度优先搜索算法在展开页面链接时总是从栈顶进行展开, 因此随着时间的增加, 栈的深度也在不断增加, 位于底部的元素可能会长时间不能进行处理, 从而造成该算法陷入一个大的页面而不能继续展开遍历。为了避免这一问题, 可以采用广度优先搜索算法, 广度优先搜索算法是通过队列这种数据结构进行展开的, 根据各个元素节点距离最初节点的层次对所有的网络节点进行遍历, 从而对每个节点都能够在访问全网一次的时间内进行公平处理, 克服了深度优先算法陷入局部节点的不足, 也保证了不会漏掉队列后面的的元素, 从而达到了公平对待互联网上所有节点资源的目的。

在广度优先算法中, 根据是否已经对节点进行访问, 将爬行队列构造为两部分:即待爬行队列与已爬行队列。待爬行队列主要存储需要进行访问的元素节点URL, 而URL在队列中的先后顺序则体现了算法的爬行策略。而已爬行队列则主要存储已经访问过的URL, 由于该队列的长度随着时间的增加不断增长, 因此需要优化该队列的插入与查询操作;在网络爬虫的爬行过程中, 不论是带爬行队列还是已爬行队列, 都需要频繁进行插入与查询操作。因此, 该队列数据结构的性能会直接影响搜索引擎的搜集性能。

对爬行器来说, 网页的采集与解析是核心工作。而爬行程序是否高效, 主要取决于网页采集的效率。其过程分为5个步骤:

1) 将待爬行队列的第一个元素取出;

2) 访问DNS服务器, 对URL进行域名解析;

3) 根据ROBOT网络协议, 获取该URL服务器的权限;

4) 若得到访问权限, 则对服务器发出URL请求;

5) 通过HTTP协议进行访问。

网络爬虫在工作时, 若频繁访问DNS服务器, 可能会造成比较繁重的网络负担, 引起服务器响应以及网络延迟, 会降低爬行程序的效率。因此, 通常在本地服务器上建立一个DNS缓存来降低对DNS服务器的访问频率。同时, 为了提高爬行程序的效率, 通常采用多线程或者多进程来对网页采集程序进行流水线处理, 多线程与多进程程序设计相对比较复杂, 需要解决的问题主要是进程的同步和互斥;也就是解决多个线程或进程共享资源的问题。造成死锁的情况通常是占有一个资源然后又请求另一资源, 因此, 若系统只存在一个共享资源就不会造成会死锁。为了解决饿死问题, 通常只采用一个等待对列, 若待爬行队列处于使用状态, 则将要访问该队列的线程插入等待队列。而队列的特点能够保证了所有的等待线程都公平对待, 从而解决了饿死问题。具体算法如下:

1) 对爬行队列上锁。若爬行队列已经上锁, 则将该线程或进程插入等待对列。

2) 取出待爬行队列的URL元素。

3) 对爬行队列解锁, 然后唤醒下一个进程或线程。

4) 访问页面, 将页面中的URL进行解析。

5) 对爬行队列上锁。如爬行队列已上锁, 则插入等待对列。

6) 将步骤4) 得到的URL插入对列。

7) 对爬行队列解锁, 唤醒下一个进程或线程。

8) 重复1) ———7) 直到结束。

3 页面解析

在解决了互联网节点页面遍历的问题后, 网络爬虫剩下的工作就是页面解析, 页面解析主要是分析与理解HTML (超文本标记语言) 文档。HTML作为一种标记语言, 能够对互联网节点的页面外观进行标准化处理, 从而规范互联网节点页面的外观与功能。实际上, 超文本标记语言就是以普通文本为基础, 通过增加各种表现样式以及字体、颜色标签来实现文档的规范化。通常各种标签都用双箭头进行标识, 而文本信息则位于<tag></tag>之间。图2为一个典型的超文本标记语言文档。

在超文本标记语言中, 能够表达连接的标签通常是anchor标签, 即通过<a>…</a>进行标识的标签, 长用来表达URL的超链接。各种页面通过该标签, 将个节点相互独立的网页进行链接, 从而构成了一种页面连接图的结构。解析HTML的文档包括两个步骤:

1) 对表单进行识别解析, 然后填写该表单提交请求, 在收到返回结果后, 从结果中提取锚文本以及URL;

2) 把超文本标记语言变换为纯文本。

在解析页面的过程中, 首先需要获取<a></a>标签对之间的纯文本信息 (锚文本) 与该文本标签的URL地址, 然后将HTML文档中的标签进行消除。这些工作都是字符串的处理工作, 处理步骤如下:

1) 使用HTML分析工具清洗页面文档, 使之转变成全部标准化的超文本标记语言页面;

2) 通过字符串处理工具解析HTML网页;

3) 将结果进行输出。

通过以上解析过程, 将URL信息从页面中抽取出来, 然后进行评价, 再放入爬行队列进行处理。

4 结束语

篇5:垂直搜索引擎之主题网络爬虫

在21世纪的今天, 信息技术的发展越来越快。随之而来的就是网络上的信息量呈现爆炸式增长。而如何从中提取中自己所需的信息成为一大难题。传统的通用搜索引擎已经不足以满足用户的需要。相应的, 针对某一特定领域提供相关信息的垂直搜索引擎应运而生。

传统网络爬虫的目标是尽可能多的采集互联网上的信息页面而不考虑其中的准确性。而主题网络爬虫则是通过实现规定好的相应条件来对互联网上的信息进行相应的提取, 不仅节省了很多网络资源, 并且信息采集效率也得到了大大的提高。

2 主题网络爬虫工作原理

网络爬虫的作用主要是获取互联网上的信息从而为搜索引擎提供数据基础, 通常通过其中的一个页面 (一般为特定的首页) 读取包含在其中的URL将之存入队列, 然后进行深度或者广度的遍历以达到获取整个互联网上信息的目的。

而主题网络爬虫[1]则是在普通网络爬虫获取信息的基础上根据一定的网络分析算法以及自己预先定义好的筛选条件来筛选出其中满足特定主题的URL再进行相应的抓取。从数据源上首先保证了垂直搜索引擎中数据来源的正确性。以下是普通网络爬虫和主题网络爬虫的对比图:

3 主题网络爬虫的搜索策略

主题网络爬虫目的在于抓取与某一特定主题相关的网页, 所以主题网络爬虫无需像普通网络爬虫那样追求最大覆盖率, 而只要保证抓取的页面与主题相关即可。为了更好的抓取出与主题相关的页面, 在进行页面抓取之前主题网络爬虫通常会根据一些搜索策略对将要进行抓取的URL进行相应的筛选。现在通常有如下几种搜索策略:

3.1 基于内容的搜索策略

基于内容的搜索策略[2]主要是利用网页文本中的内容、锚文字等文字内容信息来判断该网页内容与所需要的主题的相似度。其中很多都借用了文本分类技术, 以向量空间模型为基础。

在向量空间模型[3]中, 对文本内容的处理简化为向量空间中的向量运算, 并且它以空间上的相似度来表示语义的相似度, 方便易懂且直观。其中, 每篇文档P都表示为特征空间中一个等长的n维向量 (a1, a2…, an) , n为训练文档的个数。ai表示第i个词在该文档中所占权重的大小。这样该文档就被映射为空间上的某一点了。主题T用 (t1, t2, …, tn) 表示, 这样只要计算出文档P与主题T夹角的余弦值就可以算出主题与文档的相似度。这样的好处是余弦计算的值为0-1之间, 如果结果为0则表示正交主题与文档的相关度最差, 如果为1则表示主题与文档的相似度最好。计算公式为:

另外, Junghoo Cho等人提出了Best First算法, 该方法依据网页与主题的相关度从而动态的更改URL的优先级队列。1994年由提出了Fish Search算法, 只搜索与主题相关的页面。后来, Michael Hersovici等人又提出了Shark Search[4]算法, 该方法为对Fish Search算法的改进, 不仅判断页面是否与主题相关, 并且可以计算出其中的相关性大小。

主题网络爬虫在爬行与主题相似度较近的网页时可以表现出较好的性能, 但是却忽略了web网页之间相互形成的一定的链接结构, 预测链接价值的能力较差。由于是根据主题相似度来筛选, 所以覆盖率会较低。并且, 因为要事先比较文本内容和主题的相似度而会带来爬虫效率的相应降低, 所以有另一种基于链接的搜索策略。

3.2 基于链接分析的搜索策略

基于链接分析的搜索策略是通过页面间相互引用的关系来确定该链接的重要性从而来决定链接访问顺序的方法。通常认为被引用次数较多的页面有较高的价值, 但这种方法容易事页面的主题与用户需要的主题像违背而发生“主题偏移”的现象。此类算法中的典型代表则是Google的PageRank算法和HITS (Hyperlink-Induced Topic Search) 算法。

3.2.1 PageRank算法

PageRank算法[2,5]基于用户随机浏览网页的直觉只是使那些更具有“等级/重要性”的网页在搜索结果中另网站排名获得提升, 从而提高搜索结果的相关性和质量。PageRank根据页面的外部链接和内部链接的数量以及质量来该页面的价值。中心思想即为:一个页面被其他页面引用的次数越多, 则这个页面是重要页面, 排名获得提升。一个页面即使没有被很多页面引用, 但他被一个重要页面引用, 那么它也是重要页面。一般性, PageRank算法的PR值计算方法如下:

其中u是被研究的网页, vi是链接指向u的网页, ci是网页向外指出的链接数, d是规范因子, 通过实验得出的最佳值为0.85。

PageRank搜索策略可以使得爬虫抓取到重要的网页, 但却忽略了网页本身与主题的相关度。这样会降低查找的准确率。而且基于链接的搜索策略成本比基于内容的成本高, 且效率低。

3.2.2 HITS算法

HITS算法[2,6]是康奈尔大学的JonKieinberg博士在1998年提出的, HITS算法是Web挖掘中最有权威性和使用最广泛的算法, 他的基本思想是利用页面间的引用来挖掘包含在其中的有用信息。它主要根据一个网页的入度和出度来衡量网页的主要性, 最直观的解释就是如果一个网页的重要性高, 则他所指向的网页的重要性也高。一个重要的网页被另一个网页所指, 则表明指向它的网页重要性也会高。其中HITS算法设计两个重要的概念:

Authority:表示一个权威网页的加权入度值。若某网页被引用的数量越大, 则该网页的加权入度值越大, 则Authority越大。

Hub:表示该Web页面的加权出度值, 它提供了指向权威页面的链接集合。若某网页的加权出度值越大, 则该网页的Hub值越大。

同样HITS算法也有它本身的缺点, 因为它大多是纯粹的基于链接分析的算法, 并没有考虑到文本的内容, 没有区分出不同链接的重要性以及和主题的相关性。

3.3 基于分类器的搜索策略

为了克服基于内容的搜索策略以及基于链接的搜索策略的不足之处, 有人提出了基于分类器的主题网络爬虫, 从而可以使用分类模型来描述用户需要的主题和计算出网页与主题的相关度。通过分类器模型可以更深层次的来描述用户感兴趣的主题信息, 并可以更加准确的来计算网页的主题相关性, 而不仅仅停留在基于关键字的匹配上面。目前比著名的分类器搜索策略是S.Chakrabarti等人第一次提出的基于贝叶斯分类器模型引导主题Web爬虫。

3.3.1 基于贝叶斯分类器的搜索策略

贝叶斯分类器[7]的分类原理是通过某对象的先验概率, 利用贝叶斯公式计算出其后验概率, 即该对象属于某一类的概率, 选择具有最大后验概率的类作为该对象所属的类。它假定在给定类别的情况下, 数据x服从一定的概率, 则x出现的概率为p (x|class=+1) 。后验概率Pr (class=+1|x) 可以用如下公式计算:

其中Pr (class=+1) 是相关类别的先验概率。

通常, 应用贝叶斯分类器进行分类主要分成两阶段。第一阶段是网络分类的学习, 即从样本数据中构造分类器;第二阶段则是贝叶斯分类器的推理, 它可以来计算结点的条件概率, 对分类数据进行分类。

3.4 其他搜索策略

现在大部分网站上面对于主题相同的网页在组织上都存在着一定的相似之处, 所以有的人考虑让网络爬虫进行自我学习[8], 在这些相似性的主题中获取一些“经验”, 这样就可以提高爬虫的搜索的效率以及准确性不容易迷失方向, 但因为现在的技术有限, 自学习效率太低, 会增加用户的负担。

另外, 还有学者提出来“综合价值[8]”评价的搜索策略。他们对HITS算法进行了改进, 将页面的文本信息与连接信息相结合, 利用查询的主题与页面相关性来计算出每个页面的主题所占的权重来计算Authority权重。实验表明这样可以提高搜索效率。

3.5 搜索策略的研究趋势

通过上述的这些策略可以发现, 基于内容的搜索策略虽然可以保证比较好的准确性, 但是覆盖率不够, 而且要分析文本内容更会降低爬虫的性能。而现在越来越多的策略都是围绕链接分析来展开的, 而这也是未来主题爬虫的研究趋势。但因为链接分析会造成主题偏移, 所以未来的研究方向将会围绕如何提高链接预测的准确性, 降低时空复杂度以及让网络爬虫能够自我学习这几方面发展。另一方面基于分类器的主题相关度预测也值得进一步的研究。如何将众多方法相结合来完成一个真正的“综合性”搜索策略仍是我们需要努力的方向。

4 结束语

随着互联网信息的不断增长以及用户各种信息需求质量的提高, 垂直搜索引擎必将成为搜索引擎发展的主要部分之一。而作为为垂直搜索引擎提供数据的主题爬虫则也是我们不得不研究的重点, 只有从数据源上将信息的质量提升了, 才能让用户得到对他们有用的信息。本文分析了当今比较主流的极大主题爬虫的抓取策略并指出了相应的不足之处。最后也对主题爬虫未来发展的方向提出了一个猜测。我们有理由相信, 随着用户需求的不断增加, 主题爬虫必将越来越完善。

摘要:21世纪的今天, 网络信息量呈几何倍数的增长。传统的通用搜索引擎已经不能很好的满足我们对特定信息的需求。所以, 针对某一特定领域、某一特定人群或某一特定需求提供的有一定价值的信息和相关服务的垂直搜索引擎应运而生。而主题网络爬虫则是为垂直搜索引擎提供数据的自动化程序。本文主要研究了主题爬虫的各种搜索策略, 指出了其中的劣以及最后对将来的发展做出了一个展望。

关键词:垂直搜索,主题爬虫,搜索策略

参考文献

[1]戚欣.基于本体的主题网络爬虫设计[J].武汉理工大学学报, 2009.03:138-144

[2]刘金红, 陆余良.主题网络爬虫研究综述[J].计算机应用研究, 2007 (10) :26-29.

[3]黄萱菁, 夏迎炬, 吴立德.基于向量空间模型的文本过滤系统[J].软件学报, 2003:435-438

[4]HERSOVICI M, JACOVI M, MAAREK Y S, et al.Theshark-search algorithm:an application:tailoredWeb site mapping[C]//Proc of the 7th International World Wide Web Conference.Brisbane[:s.n.], 1998:65-74.

[5]王德广, 周志刚, 梁旭.PageRank算法的分析及其改进[J].计算机工程, 2010:291-292

[6]李玥, 刘发升.基于链接分析的HITS算法研究[J].软件导刊, 2008 (7) :70-71

[7]邹永斌, 陈兴蜀, 王文贤.基于贝叶斯分类器的主题爬虫研究[J].计算机应用研究, 2009 (9) :3418-3419

上一篇:大学生英语第一册翻译下一篇:民事起诉状被执行人