简单的来说爬虫就是一个层次有限或者宽度有限搜索的网页下载工具,宽度优先下载还是深度优先下载,有研究证明宽度优先下载更加符合网站信息组织的规律,有兴趣的读者可以在“网站的蝶形特性”,网页类型分为信息,hub型页面等内容入手了解更深入的知识,言归正传,商用搜索引擎主要面临了那些问题呢?
1)效率
由于互联网的信息相当广大,BrightPlanet甚至宣称世界互联网的网页数量大约是5500亿,那么如果抓取效率不高,那么很难实现很好的抓取效果。那么在这个主题下主要有以下难点。
- 不可重复抓
如果大量的网页重复抓取必将耗费有限的带宽资源,机器资源,时间资源。导致各种各样的问题,例如索引不及时等问题。索引网页数量少等问题。
解决的方法通常是保留一个动态查找表,每抓取一个网页需要检查一个是否被抓取,如果已经被抓取了则不在重复抓取,然而历史抓过的网页量是巨大的,即便Hash表,认为是O(1)时间复杂读的查找,但是由于网页数的巨大,不可能全部抓取历史的Hash表载入内存,因此必须采用分环的方法,通常的做法如下。对于每个url,通过一个函数将其映射到一个整形上(通常该函数为md5签名函数),通过将整型对256取摸,将url分到不同的抓取单元抓取,每个单元只保留256分之一的Hash表即可,这样可以并行256台机器进行抓取。当然还有一些细节的技术不在敖述,例如hash采用bitmap结构等。
- 充分利用带宽
通常都是多spider同时抓取,充分利用带宽的方法。
2)友好性
很多web主机都非常希望搜索引擎的检索,搜索引擎可以带来很多流量,然而由于搜索引擎的机器抓取,不同的web主机的负载能力不同,出现一下问题
- 防抓死
为了防止抓死web主机,必须建立反馈的机制,以及错开web主机访问高峰时间等方法,首先,对不同的站点建立抓取的效果评价体系,不同的站点的抓取考虑不同的抓取策略,有些站点可能每秒抓一个,有些站点每秒抓100个等等,抓取策略主要是评价抓取网页时间的评价,每秒抓取量的估计,建立合理的评价模型,尽可能在不影响web主机正常接受正常用户访问的同时,被搜索引擎抓取并索引,其次抓取的时间主要安排在夜间,错开流量的高峰时期。
- 反垃圾
有一些网站利用搜索引擎反垃圾的弱点,堆砌关键词,大量站内引用等,javascrip病毒脚本等,这都对其他站点产生了利益上的损害,也对搜索引擎的搜索质量提出了挑战。这方面的工作相当琐碎,不在多说。
- 防止对同一个网站连续抓取
对一个网站连续抓取就会有抓死的可能,这样就需要对一个抓取工作量做合理安排,尽可能将站点错开抓取,然而完全错开也会导致效率降低,比如没有充分利用keep-alive属性等等,寻找一个平衡相当关键。
3)抓取更新
有研究表明网页更新概率极低,特别是新闻类网站等,然而网页总是存在更新,那么搜索引擎需要对这种更新及时捕获,需要有一定量的重复抓取,比如每月抓取一次等策略。这样需要对主要的站点进行网页更新频率的评价,提供个性化的更新策略。
4)无效网页过滤
互联网大量无效网页,比如“访问用户不存在”,“用户网页已删除”等网页,这样的无效网页模版的提取,可以提高spider抓取高质量网页。
参考文献
闫宏飞, "可扩展Web信息搜集系统的设计、实现与应用初探," 北京大学,博士论文, 2002,