网络爬虫技术浅析.docx
- 文档编号:9710279
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:42
- 大小:52.19KB
网络爬虫技术浅析.docx
《网络爬虫技术浅析.docx》由会员分享,可在线阅读,更多相关《网络爬虫技术浅析.docx(42页珍藏版)》请在冰豆网上搜索。
网络爬虫技术浅析
网络爬虫技术浅析
分类:
java 网络爬虫2012-08-1815:
09 1641人阅读 评论(0) 收藏 举报
网络爬虫搜索引擎url算法服务器数据库
在万维网飞速发展的网络背景下,搜索引擎在人们的生活工作中无疑扮演着重要的角色,而网络爬虫则是搜索引擎技术的最基础部分。
一、网络爬虫概述
在搜索引擎成为主流检索工具的今天,互联网上的网络爬虫各式各样,但爬虫爬取网页的基本步骤大致相同:
1) 人工给定一个URL作为入口,从这里开始爬取。
万维网的可视图呈蝴蝶型,网络爬虫一般从蝴蝶型左边结构出发。
这里有一些门户网站的主页,而门户网站中包含大量有价值的链接。
2) 用运行队列和完成队列来保存不同状态的链接。
对于大型数据量而言,内存中的队列是不够的,通常采用数据库模拟队列。
用这种方法既可以进行海量的数据抓取,还可以拥有断点续抓功能。
3) 线程从运行队列读取队首URL,如果存在,则继续执行,反之则停止爬取。
4) 每处理完一个URL,将其放入完成队列,防止重复访问。
5) 每次抓取网页之后分析其中的URL(URL是字符串形式,功能类似指针),将经过过滤的合法链接写入运行队列,等待提取。
6) 重复步骤 3)、4)、5)。
1.1网页搜索策略
万维网高阔无边,为了最大限度利用有限的资源,我们需要进行资源配置,并运用某些策略使爬虫优先爬取重要性较高的网页。
目前主流的网页搜索策略主要有三,即:
深度优先、广度优先、最佳优先。
深度优先,即从起始网页开始,选择一个URL,进入,分析这个网页中的URL,选择一个再进入。
如此一个链接一个链接地深入追踪下去,处理完一条路线之后再处理下一条路线。
有一个例子是:
在封建制度中,封建帝王的继承制度是长子优先级最高,长孙次之,次子随后。
即如果长子去世,那么长孙的优先级比次子高。
该类爬虫设计时较为简单。
然而深度优先型网络爬虫存在一个问题:
门户网站提供的链接往往最具价值,PageRank也很高,而每深入一层,网页价值和PageRank都会相应地有所下降。
这暗示了重要网页通常距离种子较近,而过度深入抓取到的网页却价值很低。
由于这个缺陷,广度优先策略产生了。
广度优先(又称宽度优先),即从起始网页开始,抓取其中所有链接的网页,然后从中选择一个,继续抓取该网页中的所有链接页面。
网络爬虫在抓取网页时普遍采用这种策略,这其中有两个原因:
第一,万维网的实际深度最大能达到17层,网页之间四通八达,因此存在从一个网页到另一个网页的最短路径问题。
如果采用深度优先,则有可能从一个PageRank很低的网页爬取到一个PageRank实际很高的网页,不方便计算PageRank(个人理解)。
第二,采用宽度优先策略有利于多个爬虫并行爬取。
这种多爬虫合作抓取通常是先抓取站内链接,遇到站外连接就爬出去,抓取的封闭性很强。
广度优先策略的优点在于其设计和实现相对简单,且这种策略的基本思想是:
与种子在一定距离内的网页重要度较高,符合实际。
在聚焦爬虫的应用中,广度优先策略可以与网页过滤技术结合,即先用广度优先抓取一些网页,再将其中与主题无关的过滤掉。
但这种方法的缺点是随着抓取网页的增多,算法的效率会变低。
另外,还有一种常用于聚焦爬虫的网页搜索策略——最佳优先策略。
最佳优先,即按照某种网页分析算法预测候选URL与目标网页的相似度,或主题的相关性,并选取其中评价最好的一个或几个URL进行进一步的爬取。
这种策略的缺陷是可能会有很多相关网页被忽略,但相对的,这种策略可以将无关网页数量降低30%—90%。
1.2对URL的获取和处理
网络爬虫访问的是后台html代码,它分析出URL之后,对其进行过滤并将结果放入运行队列。
在取得URL时要提防一种“爬虫陷阱”。
因为即使一个URL能访问到相应内容,也不能保证服务器端有一个相应页面存在,例如动态网页的应用可能会使网站中存在一些无法穷尽的地址,让爬虫在一个位置上无限循环而无法终结。
针对“爬虫陷阱”,其中一种应对方法是:
检查URL长度(或“/”的数量),一旦超出某个阈值就不再获取。
链接过滤处理涉及两个数组,第一个是“必须存在的关键字”组。
分析链接时,链接中必须存在这个数组中所有关键字(例如关键字为http和index,则
对关键字的过滤方法包括以下两种:
1) 只取得包含给定关键字的链接,这样取得的链接为内部链接。
2) 只取得不包含给定关键字的链接,这样取得的链接为外部链接。
1.3页面选取问题
为提高资源利用率,我们需要尽可能提取最为重要的网页。
网页的重要程度判断有许多依据,如:
链接的欢迎程度(通过反向链接判断)、链接的重要度(通过某种URL函数判断,如认为包含.com和home的URL重要度高于包含.cc和map的网页)、链接平均深度(通过距离种子的深度判断)、历史权重、网页质量等。
当需要判断网页与某些给定关键字的相关性时,我们需要利用网页分析算法。
网页分析算主要有以下三种:
基于网页拓补、基于网页内容、基于用户访问。
基于网页拓补,即通过已知的网页或数据,对其有间接关系的网页或网站做出评价的算法,这种算法广泛应用于实时搜索,其中又包括:
网页粒度分析算法、网站粒度分析算法、网页块粒度分析算法三种。
1、网页粒度分析算法
常见的有链接分析算法PageRank和hits,两者都得到网页的重要度评价。
其中PageRank考虑了用户访问行为的随机性和sink网页,但忽略了大多数用户访问时具有目的性的事实。
针对这个问题,hits提出了权威性网页和中心型网页两个概念。
2、网站粒度分析算法
比网页粒度分析算法更加简单有效,其关键在于站点的划分和评级,SiteRank的计算方法与PageRank类似。
利用分布式SiteRank计算,不仅降低了单机站点的算法代价,而且克服了单独站点对整个网络覆盖率有限的缺点。
另外,SiteRank不会被常见的针对PageRank的造假所蒙骗。
3、网页块粒度分析算法
基本思想是通过某种网页分割算法,将网页分为不同网页块,排除其中与主题无关的链接后在进行进一步处理。
这种分析算法可以避免广告等噪声链接的干扰。
基于网页内容,即利用网页内容(文本、锚文本、其他数据等)特征进行的网页评价。
其针对网页数据形式不同可分为三类:
1、针对以文本和超链接为主的无结构或结构很简单的网页。
随着如今网页内容的多样化,该方法已不再单独使用。
2、针对从结构化的数据源(RDBMS)动态生成的页面,其数据不能直接批量访问。
3、介于1和2之间的,具有较好结构,遵循一定模式或风格,可直接访问的网页。
在提取html文档的文本信息时要过滤标识符,但同时还要注意依照标识符来取得版式信息(如标题、粗体、关键字等),另外还要过滤无用链接(如广告链接)。
锚文本可以作为所在页面内容的评估和所指向的页面内容的评估,还可以收集一些搜索引擎不能索引的文件(例如图片)。
多媒体,图片等文件一般通过锚文本和相关文件注释来判断文件内容。
对于doc、pdf等有专业厂商提供的软件生成的文档,厂商会会为爬虫提供相应的文本提取接口的插件。
Google对网页优先性的考虑因素有以下几点:
1)查询驱动的爬取
此方法适于实时搜索。
对于一些最新出现的热门话题,或随时变动的数据(如股市信息),数据库里没有这些网页的信息,如果此时接受了用户的查询,则会通过已爬取的其他网页来判断未爬取的网页的相关性。
2)反向链接数
3)PageRank值
4)前向链接数
5)路径深度
路径深度浅的页面被认为更重要。
1.4网页去重方法
网页之间的链接关系错综复杂,为了避免重复抓取同一页面,要把需要入库的链接与数据库中的运行队列和完成队列都进行比较。
另外,大型搜索引擎多采取多爬虫并行合作抓取的方法,这也产生了一些问题。
例如Google为了避免多爬虫合作时重复抓取同一页面,而采用了CrawlCachingProxy(缓存代理)。
网络爬虫在工作时,首先通过DNS解析一个URL的主机IP地址,然后连接相应服务器的端口并发送请求,通过服务器响应来获取相关页面内容。
URL与IP之间的对应关系可能是一对一、一对多或多对一的。
一个URL对应多个IP通常出现在访问量较大的域名,将一个URL与多个IP绑定以分流访问量,减小单个服务器的访问压力(如Baidu、Google);一个IP对应多个URL则是出于节约服务器的目的,或是由于公网IP地址匮乏而产生的策略,当客户端对该IP进行访问时,先通过请求的协议头部来获取需要访问的URL,再将该请求通过反向代理或虚拟主机的方式转发到相应服务。
由于这种情况,若用IP作为判断重复网页的标准,则可能因为URL与IP的一对多而出现重复获取,或因为URL与IP的多对一而出现遗漏。
因此,爬虫在判断重复页面时主要以URL所谓判断标准,以保证服务的唯一性。
1.5网络爬虫的效率
单线程的爬虫由于页面的分析和下载不能同时而效率较低,因此出现了多线程爬虫。
有一个例子可以帮助理解多线程的意义:
现在很多下载软件都支持多线程同步下载,即将下载内容分成几部分同步下载,速度比单线程要快上很多。
爬虫采用线程进行循环,但这存在一定弊端:
一旦发生网络阻塞,整个线程就一直处于等待状态而导致死亡。
一般采取线程监控的方法来解决,即存在一个主线程和一个监控线程,监控线程每隔一段时间去访问一次主线程并与其分享的变量,一旦发现超时,就认为网络阻塞,这时终止主线程并重新启动,由此避免了网络阻塞导致线程一直等待的问题。
1.6网页更新
对于搜索引擎而言,评价网络爬虫效率的一个重要标准是爬虫的开销。
爬虫开销 = 重复抓取的老页面数 / 发掘的新页面数
即是说,爬虫应当尽量发掘新页面而减少重复页面的爬取,而决定对某个网页的更新频率涉及到时间更新控制。
一般做法是将这次抓取到的页面上的数据与上一次相比较,如果进行连续五次这样的比较都没有变化,则将以后爬取该网页的时间扩大为原来的2倍;如果进行连续五次这样的比较都有变化,则将以后爬取该网页的时间缩短为原来的1/2。
另外,爬虫在更新网页内容时,不需要将网页重新抓取一遍,只需对网页的一些属性加以判断(如日期),并与上次结果相比即可,如果相同则无需更新。
1.7实时搜索
设想当用户查询一个热门话题,而爬虫还未抓取相关网页,这时就不能在用PageRank来评价网页重要性了。
PageRank的计算对象是已经抓取下来的网页,即,在计算PageRank过程中不会有新页面加入,这种方法被称为“离线”(off-line)的计算方法。
这种方法适合于对结果的排序,但不适用于爬虫的调度(即动态决定URL的抓取顺序),因而诞生了一种OPIC(On-linePageImportanceComputation)的新型算法策略。
OPIC的基本思想是:
每个页面有一个初始cash,在抓取过程中,通过前向链接将cash平均分给该网页指向的所有页面(分配过程一次完成),而爬虫在爬取过程中只需优先抓取cash较多的页面。
1.8其他
1、对于一些出售资料的网站,他们希望搜索引擎能所引导他们的资料,但又不能无偿将资料的全部内容提供给搜索用户。
因此,他们为网络爬虫提供了专门的用户名和密码,设置一定的权限,是爬虫能够对网页进行爬取而又不会让用户看到全部内容(用户点开网页时,需要提供权限验证)。
2、每个网络爬虫都有自己的名字。
在抓取网页时会向服务器端发送请求,该请求中包含一个用于表示爬虫身份的字段,这个请求会留在访问日志记录中,便于网站管理员查看。
3、爬虫进入网站时会先访问网站服务器根目录下的robots.txt,这个协议告诉爬虫网站中那些内容希望被抓取,那些内容不希望被抓取。
该协议不具备强制力。
二、网络爬虫实例
2.1Heritrix
Heritrix是一个爬虫框架,可以加入一些可互换的组件。
Heritrix是用来获取完整精确的网站内容的爬虫,除文本内容之外,它还获取其他非文本内容(如图片等)并对其进行处理,且不对网页内容进行修改。
当重复爬行相同URL时,不会对先前网页进行替换。
Heritrix主要有以下几步:
1)在预定的URL中选择一个并获取。
2)分析,并将结果归档。
3)选择已经发现的感兴趣的URL,加入运行队列。
4)标记已经处理过的URL
Heritrix利用广度优先策略来进行网页获取,其主要部件都具有高效性和可扩展性。
然而Heritrix也有其一定的局限性,如:
只支持单线程爬虫,多爬虫之间不能合作;
操作复杂,对有限的资源来说是一个问题;
在硬件是系统失败时,其恢复能力较差等等。
2.2Nutch
Nutch深度遍历网站资源,将这些资源抓取到本地,使用的方法都是分析网站每一个有效的URL并向服务器端提交请求来获得相应结果,生成本地文件及相应的日志信息等。
Nutch与Heritrix有几点差异,即:
1)Nutch只获取并保存可索引的内容。
2)Nutch 可以修剪内容,或者对内容格式进行转换。
3)Nutch 保存内容为数据库优化格式,便于以后索引;且对重复URL,刷新替换旧的内容。
4)Nutch 从命令行运行、控制。
5)Nutch 的定制能力不够强(不过现在已经有了一定改进)。
2.3Larbin
Larbin不同于以上两种网络爬虫,它只抓取网页,而不提供包括分析网页、将结果存储到数据库以及建立索引等服务。
Larbin的目的是对页面上的URL进行扩展性的抓取,为搜索引擎提供广泛的数据来源。
虽然工作能力较为单一,但Larbin胜在其高度可配置性和良好的工作效率(一个简单的larbin的爬虫可以每天获取500万的网页),这也是Larbin最初的设计理念。
2.4Lucene
Lucene 是一个基于Java的全文信息检索工具包,它本身不是一个完整的全文索引应用程序,而是为各种应用程序提供索引和搜索功能。
只要能把要索引的数据转化的文本格式,Lucene 就能对该文档进行索引和搜索。
Lucene采用的是一种称为反向索引(invertedindex)的方法。
因此,在用户输入查询条件的时候,Lucebne能非常快地得到搜索结果。
对文档建立好索引后,搜索引擎首先会对关键词进行解析,然后在建立好的索引上面进行查找并返回和用户输入的关键词相关联的文档。
三、个人体会
在如今信息爆炸的社会中,网络成为人们生活中不可或缺的工具,而搜索引擎又在这其中扮演者至关重要的角色。
搜索引擎是一个实用性很强的研究领域,无论是网络爬虫、数据库管理、中文分词还是索引的建立方法,都值得我们去深入了解。
搜索引擎技术已成为如今的热门学科之一,针对搜索引擎而产生的SEO(搜索引擎优化)也逐渐成为主流。
对于网站来说,被搜索引擎索引是必要的,但近年来,随着良莠不齐的各类爬虫频繁出没,一些网站也承受着由爬虫带来的困扰。
另外,各种针对搜索引擎的作弊也逐渐浮出水面,这些都是今后有待解决的问题。
四、参考文献
*基本资料全部来源于网络
http:
//www.dunsh.org/2006/08/20/anchor-text/
http:
//zh.wikipedia.org/zh-cn/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E
http:
//zh.wikipedia.org/zh-cn/Robots.txt
网络爬虫技术的发展趋势
北京交通大学通信与信息系统北京市重点实验室
蔡笑伦
[摘要]搜索引擎不断的发展,人们的需求也在不断的提高,网络信息搜索已经成为人们每天都要进行的内容。
如何使搜索引擎能
时刻满足人们的需求,我们需要找到一种方法。
本文介绍了搜索引擎的分类及工作原理,
阐述了网络爬虫技术的搜索策略,展望新一代搜索引擎的发展趋势。
[关键词]网络爬虫策略搜索引擎
网络快速发展的今天,互联网承载着海量的信息,能够准确快速的提取我们所需要的信息是现在的挑战。
传统的搜索引擎有Yahoo,Google,XX等,这些检索信息的工具是人们每天访问互联网的必经之路。
但是,这些传统性搜索引擎存在着局限性,它不能全面的准确的找
到所需要的信息,也会使一些和需求无关的内容一起搜索到。
严重的降低了使用这些信息的效率,所以说提高检索信息的速度和质量是一个专业搜索引擎主要的研究内容。
1.搜索引擎的研究1.1搜索引擎的分类
搜索引擎按其工作方式可分为三种,分别是全文搜索引擎,目录索引类搜索引擎和元搜索引擎。
(1)全文搜索引擎
全文搜索引擎是最常用搜索引擎,大家最熟悉的就是国外的代表Google,和国内的代表XX。
它们通常都是提取各个网站的网页文字存放在建立的数据库中,检索与用户查询条件匹配的相关记录,然后按其自己设定的排列顺序将结果返回给用户。
从搜索结果来源的角度,全文搜索引擎又可细分为两种,一种是拥有自己的检索程序,它们拥有自己的网页数据库,搜索到得内容直接从自身的数据库中调用,如Google和XX;另一种则是租用其他引擎的数据库,但是,是按自定的格式排列搜索结果,如Lycos引擎。
(2)目录索引型搜索引擎目录索引,就是将网站分类,然后存放在相应的目录里,用户在查询所需要的内容时有两种选择一种是关键词搜索,另一种是按分类目录一层一层的查找。
据信息关联程度排列,只不过其中人为因素要多一些。
如果按分层目录查找,某一目录中网站的排名则是由标题字母的先后以关键词搜索,返回的结果跟搜索引擎一样,也是按自定顺序决定。
目录索引只能说有搜索功能,但仅仅是按目录分类的网站链接列表。
用户完全可以不用进行关键词查询,仅靠分类目录也可找到需要的信息。
目录索引型搜索引擎中最具代表性的是Yahoo(雅虎)。
其他著名
的还有LookSmart、
About等。
国内的搜狐、新浪、网易搜索也都属于这一类。
(3)元搜索引擎
当用户在进行查询时,元搜索引擎可以同时在其他多个引擎上进行搜索,将检索结果进行统一处理,并将结果以统一的格式返回给用
户。
正因为如此,
这类搜索引擎的优点是返回结果的信息量更全面,但是缺点就是无用的信息太多不能准确的找到用户需要的结果。
具有代表性的元搜索引擎有Dogpile、InfoSpace、Vivisimo等,中文元搜索引擎中著名的有搜星搜索引擎。
在搜索结果排列方面,不同的元搜索引擎有不同的结果排列的方
式。
如Dogpile,
就直接按来源引擎排列搜索结果,如Vivisimo,是按自定的规则将结果重新进行排列。
1.2搜索引擎的工作原理
搜索引擎主要是对用户要求的信息进行自动信息搜集,这个功能共分为两种:
一种是定期搜索,即每隔一段时间搜索引擎主动派出“Spider”程序,目的是对一定IP地址范围内的互联网站进行检索,如果一旦发现新的网站,它会自动提取网站的信息和网址加入自己的数据库;另一种是提交网站搜索,即网站拥有者主动向搜索引擎提交网址,搜索引擎在一定时间内定向向你的网站派出蜘蛛程序,扫描你的网站并将有关信息存入数据库,以备用户查询。
如果用户以关键词查询所需要的信息时,搜索引擎会在数据库中进行搜寻,如果找到与用户要求内容相匹配的网站时,搜索引擎通常根据网页中关键词的匹配程度,出现的位置/频次,链接质量等特殊的算
法计算出各网页的相关度及排名等级,然后根据关联度高低,按顺序将
用户所需要的内容反馈给用户。
2.网络爬虫
2.1通用网络爬虫和聚焦网络爬虫的工作原理
网络爬虫是搜索引擎的重要组成部分,它是一个自动提取网页的程序,为搜索引擎从网上下载网页。
传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。
与传统爬虫相比,聚焦爬虫的工作流程则较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入
等待抓取的URL队列。
然后,
它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。
另外,所有被爬虫抓取的网页将会被系统存起来,进行一定的分析、过滤,并建立索引,为了方便之后的查询和检索。
2.2网络爬虫的搜索策略
(1)IP地址搜索策略
IP地址搜索策略是先给爬虫一个起始的IP地址,然后根据IP地址以递增的方式搜索本IP地址段后的每一个地址中的文档,它完全不考虑各文档中指向其它Web站点的超级链接地址。
这种搜索策略的优点是搜索比较全面,因此能够发现那些没被其它文档引用的新文档的信息源;但是缺点是不适合大规模搜索。
(2)深度优先搜索策略
深度优先搜索是一种在开发爬虫早期使用较多的方法。
它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML文件)。
例如,在一个HTML文件中,当一个超链被选择后,被链接的HTML文件将执行深度优先搜索,也就是说在搜索其余的超链结果之前必须先完整地搜索单独的一条链。
深度优先搜索沿着HTML文件上的超链走到不能再深入为止,然后返回到某一个HTML文件,再继续选择该HTML文件中的其他超链。
当不再有其他超链可选择时,说明搜索已经结束。
(3)宽度优先搜索策略
宽度优先搜索的过程是先搜索完一个Web页面中所有的超级链
接,然后再继续搜索下一层,直到底层为止。
例如,一个HTML文件中有三个超链,选择其中之一并处理相应的HTML文件,然后不再选择第二个HTML文件中的任何超链,而是返回并选择第二个超链,处理相应的HTML文件,再返回,选择第三个超链并处理相应的HTML文件。
当一层上的所有超链都已被选择过,就可以开始在刚才处理过的HIML文件中搜索其余的超链。
宽度优先搜索策略的优点:
一个是保证了对浅层的优先处理,当遇到一个无穷尽的深层分支时,不会导致陷进WWW中的深层文档中出现出不来的情况发生;另一个是它能在两个HTML文件之间找到最短路径。
宽度优先搜索策略通常是实现爬虫的最佳策略,因为它容易实现,而且具备大多数期望的功能。
但是如果要遍历一个指定的站点或者深层嵌套的HTML文件集,用宽度优先搜索策略则需要花费比较长的时间才能到达深层的HTML文件。
2.3网络爬虫的发展趋势
随着AJAX/Web2.0的流行,如何抓取AJAX等动态页面成了搜索引擎急需解决的问题,如果搜索引擎依旧采用“爬”的机制,是无法抓取到AJAX页面的有效数据的。
对于AJAX这样的技术,所需要的爬虫引擎必须是基于驱动的。
而如果想要实现事件驱动,基金项目:
本文系北京市自然科学基金资助项目(4102047);北京市教育委员会学科建设与研究生建设资助项目(JXKJD20090001);科技人员服务企
业项目(2009GJA00048)。
作者简介:
蔡笑伦(1984-),男,北京交通大学工程硕士研究生,主要研究方向为网络舆
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 爬虫 技术 浅析