网页下载过程中的网络延迟成为整个系统性能的瓶颈。为提高效率,网络蜘蛛设计成队列缓冲、多线程并行结构。网络蜘蛛的三大模块:
-
HTTP下载模块。利用HTTP协议下载,获取并存储网页内容。
-
链接分析模块。提取网页内的超链接,获取后续页面入口。
-
下载控制模块。控制网页访问次序、更新策略、访问队列高度等。
入口页面往往是网站的主页功sitemap页面。
Spider对网站的访问尝试一般控制在3~5层。
网络爬虫的优化策略和原则:
-
避免重复下载。
-
增加多个工作队列,提高并了能力。工作队列有:等待队列、处理队列、成功队列、失败队列。
-
利用网页Proxy缓冲,检查是否需要从远程下载。
-
同一站点的URL尽量映射到同一个线程处理,避免同时访问给网站带来负担。
与Nutch相比,Heritrix和Larbin没有与检索密切结合,用户需要自己负责文件格式的转换和索引工作。
下载后的数据存储主要以目录文件形式存放。具体见容包括:
-
Web数据库。实际上是URL数据库,只为网络爬虫服务,不参与后面的检索与加载工作。
-
数据段(segment)。它包括三种类型:待下载列表(fetchlist)、已获得的网页(fetcher output)、数据段索引(index)--采用Lucene格式索引当前已下载的索引。
-
数据索引。它是 数据段索引的合并和汇集。
搜索引擎的3种分类:全网、垂直和企业搜索引擎。
网络爬虫的2种工作模式:互联网全网抓取和局域网抓取。
Nutch系统已经扩展了一套底层使用分布式结构的大型搜索引擎。
真实的互联网全网搜索引擎需要一个很大入口URL列表,DmozParser工具提供了对开放式互联网DMOZ目录库的支持。另一种方法是查找国内比较大的互联网站点,比如可以从互联网网站大全或网站排行榜里分析URL获得,在实际测试中采用了vipurls.txt文件,里面存放了100个比较大的国内互联网网站。
总体来说Heritrix网络蜘蛛的功能更为强大,Nutch更好地支持搜索引擎(与Lucene紧密结合)。两者特点对比如下:
-
Nutch是一个搜索引擎框架,而Heritrix专注于网络信息的下载。
-
Nutch只获取并保存可索引的内容,并可对下载后有内容过滤修改,而Heritrix则可以适用各种类型信息,严格保持网页原貌。
-
Nutch的更新策略是直接替换原来的旧网页,为索引作好准备;而Heritrix则保留历史内容,下载新内容。
-
都以任务形式管理,Nutch只支持命令行,Heritrix还支持Web控制界面。
-
Nutch下载控制参数少,Heritrix更加灵活。
Heritrix中有几个关键模块这里介绍一下:
-
下载控制器CrawlController。总控部分,以主线程形式运行。通过调试,最终把下载地址管理器Frontier中地址列表传递给线程池中的ToeThreads,完成下载任务。
-
边界控制器Frontier。用来确定下一个将抓取的网页。实现对网站访问的均衡处理,避免多线程同时访问同一个网站造成网站压力。Frontier内至少包含最新发现的URL、正在处理的URL、已经下载的URL。
-
服务器缓存Servercache。实现搜索引擎中的DNS缓存。Servercache中存放服务器的持久信息,包括IP地址、历史下载记录、机器人策略等。
开源缓存系统:
-
OSCache是很多Java项目中广泛采用的高性能J2EE缓存框架。OsCache适用于任何Java应用程序中的缓存方案。
-
JCS(Java Caching System)是一个分布式缓存系统,是基于服务器的Java应用程序。
-
EHCache是一个纯Java实现的缓存系统,开发者调用EHCache的方式为嵌入用户系统的进程完成缓存。
-
JBossCache是针对JBoss服务器系统的缓存程序。JBossCache主要应用于事务处理缓存,能够缓存企业级应用数据。
本文来自博客园,作者:高性能golang,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/2111681.html