网络爬虫
2009-08-25杨松梅
[摘要]随着互联网和宽带上网的普及,搜索引擎在中国异军突起,并日益渗透到人们的日常生活中。在互联网普及之前,人们查阅资料首先想到的是拥有大量书籍资料的图书馆,但是今天很多人都会选择一种更方便、快捷、全面、准确的查阅方式互联网。但是搜索引擎也得有一个自己的‘书库,这个‘书库是如何获得的呢?那就需要网络爬虫了,它可以从互联网上搜取各式各样的信息,组成搜索引擎的资料库,以便用户查询。
[关键词]搜索引擎,网络爬虫,信息抓取
中图分类号:TP-9文献标识码:A文章编号:1671-7597(2009)0810066-01
互联网搜索引擎通常由5个主要环节构成。系统主要模块包括网页信息抓取、网页内容分析、网页索引建立、网页结果排序、网页搜索工具与接口。主要功能模块结合其他中文信息处理和信息检索技术,完成整个网页搜索引擎。其中网络信息抓取需要网络爬虫来完成,网络爬虫在搜索引擎中起着至关重要的作用,它是搜索引擎信息来源的核心。
网络爬虫功能需求主要是完成信息抓取,其他功能设计都围绕信息抓取这个核心功能进行。网络爬虫的设计开发总体上包括5方面任务要求。具体的内容描述如下:
1.网络爬虫具有可配置性。它需要动态配置信息,设定待抓取URL地址列表、抓取深度和层次范围。网络爬虫需要行为控制信息,包括抓取使用的线程或进程情况、时间间隔和更新周期。
2.新网站和新链接的发现能力。网络爬虫需要简单分析下载的页面,提取包含的新URL。新增加的URL增加到等待下载队列,保证网络爬虫的自我资源发现能力。
3.下载页面的存储和管理。网络爬虫存储下载的网页内容,为网页分析和索引提供数据。海量搜索引擎下载的文档数量惊人,需要合理的管理策略。存储的高效和可靠性至关重要,需要考虑分布式存储策略。
4.高效的网页更新、死锁判别方法。网络爬虫对历史下载的网页需要定期检查,判断页面内容是否更换,确定网页源是否已经被删除。这部分功能需要网络爬虫通过多线程并发控制,控制对同一站点的访问并发数量和检查周期。
5.域名解析缓存机制和已下载内容的本地代理缓存。网络爬虫需要经常访问同一个域名下的网页内容。域名解析内容缓存能存储域名与IP地址的复杂对应关系,减少域名查询次数,大大提高网络利用率。本地下载代理内容可以避免重复下载减少一定时期内对目标站点的多次下载。
从结构上来看,互联网其实就是一张大型的网络图。搜索引擎中可以把每一个网页作为一个节点,把网页内的超链接当作连接网页的弧。搜索引擎在进行信息抓取时,可以按照图论的相关算法进行处理。网络爬虫从某个网站的首页进入,按照图论的相关遍历算法就可以访问这个网站的所有信息。
为了实现网络爬虫,需要对HTTP协议有所了解。HTTP协议是用于从互联网WWW服务器传送超文本到本地浏览器的传送协议。协议的目标是使浏览器更加高效,提高网络传输效率。HTTP协议不仅可以正确、快速的传输超文本文档,还可以确定传输文档中的哪一部分首先显示。
为了更快的实现抓取,可以采用封装的HTTP协议API,也可以采用最基本的Socket通信编程模式。Socket就是所谓的网络套接字。
互联网上分布着大量网页,不同网页的访问速度差别比较大。网页下载过程中的网络延迟成为整个系统性能的瓶颈。为了提高效率,网络爬虫被设计成队列缓冲、多线程并行结构。网络爬虫具有3大模块:HTTP下载模块、链接分析模块、和下载控制模块。3大模块有机的组成一个高效的功能体系。各模块的作用如下:
·HTTP下载模块利用HTTP网络协议下载,获取并存储网页内容。
·链接分析模块能够提取网页内的超链接用来获取后续网页入口。
·下载控制模块控制网页访问次序、更新策略、访问队列调度等工作。
网络爬虫访问一个网站,需要从已知的入口页面开始。这个入口页面往往是网站的首页或者sitemap页面。从这个页面通过链接分析,寻找并访问后续页面地址。
互联网的链接结构是一个典型的网状结构。在这个访问过程中需要遵循一系列的算法。通常,网络爬虫对网站的访问有访问深度限制,一般在3~5层。遍历策略多用数据结构中典型的算法:广度优先和深度优先。
从应用角度来看,广度优先能尽快地比较平均的获取不同网站的内容,比较适合于大型搜索系统初期网页库的建立;深度优先在设计的时候比较容易,对垂直搜索或者站内搜索比较合适。
Java提供了多个访问各种标准Internet的协议类库,网络爬虫可以直接用Java的网络开发包java.net.*函数调用来完成。
网络爬虫的设计思路是先确定需要下载的网页URL,指定通信端口,创建一个用于网络通信的Socket对象。结果通过流失输出接口输出,创建相应的输出对象。通过输入接口,向Socket对象传入HTTP下载请求。远端的目标Web服务器得到请求后,发送应答消息。本地Socket对象收到消息后缓存并输出,就完成了整个网页下载过程。传输过程中使用默认的HTTP协议进行。
网络爬虫的设计流程中,核心部分是获取等待下载的URL列表、创建下载的客户端、获取并存储得到的网页结果。
大型搜索引擎系统需要抓取海量信息数据。为了有效的提高网络爬虫的性能和效率,并满足系统数据下载需求,网络爬虫的设计通常包含以下一系列优化策略和原则:
·对等待下载的URL进行重排,避免重复下载。
·增加多个工作队列,提高系统并发能力。工作队列主要有4类:等待队列、处理队列、成功队列、失败队列。
·利用网页proxy缓冲,检查是否需要从远程下载,减少不必要的传输。
·同一站点的URL尽量映射到同一个线程处理,避免同时访问给被访问站点带来负担。
参考文献:
[1]卢亮、张博文著,《搜索引擎原理、实践与应用》,电子工业出版社,2007,9.
[2]Jennifer Grappone,Gradiva Couzin著,杨明军译,《搜索引擎优化》,清华大学出版社,2007,7.
[3]李刚、宋伟、邱群著,《Ajax+Lucene构建搜索引擎》,人民邮电出版社,2006.
[4]Margaret H.Dunham著,郭崇惠、田风占、靳晓明译,《数据挖掘教程》,清华大学出版社,2005,5.
作者简介:
杨松梅(1960-),吉林省四平市人,副教授,就职于长春市司法局培训中心。