第1部分 通用爬虫
1.1 通用爬虫框架介绍
图1-1描述了通用的爬虫框架,其基本上包括了一个爬虫系统所需要的所有模块。任何一个爬虫系统的设计图,会发现都有一个环路,这个环代表着爬虫大致的工作流程:根据url将对应的网页下载下来,然后提取出网页中包含的url,再根据这些新的URL下载对应的网页,周而复始。爬虫系统的子模块都位于这个环路中,并完成某项特定的功能。
图1- 1 通用爬虫框架描述图
1.1.1DNS Resolver和fetcher
这两个模块是两个非常简单的独立的服务:DNS Resolver负责域名的解析;Fetcher的输入是域名解析后的url,返回的则是该url对应的网页内容。对于任何一次网页的抓取,它都需要调用这两个模块。
对一般的爬虫,两个模块可以做得非常的简单,甚至合并到一起。但是对于性能要求很高的系统,它们可能成为潜在的性能瓶颈。主要原因是无论是域名解析还是抓取,都是很耗时的工作。比如抓取网页,一般的延迟都在一百毫秒级别,如果遇上慢的网站,可能要几秒甚至十几秒,这导致工作线程会长时间的处于阻塞等待的状态。如果希望Fetcher能够达到每秒几千个网页甚至更高的下载,就需要启动大量的工作线程。因此,对于性能要求高的爬虫系统,一般会采用epoll或者类似的技术将两个模块改成异步机制。另外,对于DNS的解析结果也会缓存下来,大大降低了DNS解析的操作。
1.1.2Content Seen
Internet上的一些站点常常存在着镜像网站(mirror),即两个网站的内容一样但网页对应的域名不同。这样会导致对同一份网页爬虫重复抓取多次。为了避免这种情况,对于每一份抓取到的网页,它首先需要进入Content Seen模块。该模块会判断网页的内容是否和已下载过的某个网页的内容一致,如果一致,则该网页不会再被送去进行下一步的处理。这样的做法能够显著的降低爬虫需要下载的网页数。至于如果判断两个网页的内容是否一致,一般的思路是这样的:并不会去直接比较两个网页的内容,而是将网页的内容经过计算生成FingerPrint(指纹),通常FingerPrint是一个固定长度的字符串,要比网页的正文短很多。如果两个网页的FingerPrint一样,则认为它们内容完全相同。
1.1.3Extractor和Url Filter
Extractor的工作是从下载的网页中将它包含的所有URL提取出来。这是个细致的工作,你需要考虑到所有可能的url的样式,比如网页中常常会包含相对路径的url,提取的时候需要将它转换成绝对路径。
Url Filter则是对提取出来的URL再进行一次筛选。不同的应用筛选的标准是不一样的,比如对于baidu/google的搜索,一般不进行筛选,但是对于垂直搜索或者定向抓取的应用,那么它可能只需要满足某个条件的url,比如不需要图片的url,比如只需要某个特定网站的url等等。Url Filter是一个和应用密切相关的模块。
1.1.4Url Seen
Url Seen用来做url去重。对于一个大的爬虫系统,它可能已经有百亿或者千亿的url,新来一个url如何能快速的判断url是否已经出现过非常关键。因为大的爬虫系统可能一秒钟就会下载几千个网页,一个网页一般能够抽取出几十个url,而每个url都需要执行去重操作,可想每秒需要执行大量的去重操作。因此Url Seen是整个爬虫系统中非常有技术含量的一个部分。
1.1.5 Url Set
当url经过前面的一系列处理后就会被放入到Url Set中等待被调度抓取。因为url的数量很大,所以只有一小部分可能被放在内存中,而大部分则会写入到硬盘。一般Url Set的实现就是一些文件或者是数据库。
1.1.6URL Frontier
Frontier是整个爬虫系统的引擎和驱动,组织和调用其它的模块。当爬虫启动的时候,Froniter内部会有一些种子url,它先将种子url送入Fetcher进行抓取,然后将抓取下来的网页送入Extractor 提取新的url,再将新的url去重后放入到Url Set中;而当Froniter内部的url都已经抓取完毕后,它又从Url Set中提取那些新的没有被抓取过的url,周而复始。
第2部分 Heritrix开源爬虫介绍
通用的爬虫技术目前已经比较成熟,存在较多的开源爬虫框架,本调研报告主要对Heritrix和Nutch两个比较成熟的java开源爬虫框架进行介绍。
2.1 Heritrix
Heritrix 是个“Archival Crawler”——来获取完整的、精确的、站点内容的深度复制。包括获取图像以及其他非文本内容。抓取并存储相关的内容。对内容来者不拒,不对页面进行内容上的修改。重新爬行对相同的URL不针对先前的进行替换。爬虫主要通过Web用户界面启动、监控和调整,允许弹性的定义要获取的url。
图2- 1 Heritrix系统框架图
Web Administrative Console:一个基于web的控制台。
CrawlOrder一个crawl任务的配置。它是一个基于XML的对象,Heritrix根据CrawlOrder中的配置,选择合适的模块来组装这次抓取任务的程序。其中,同时它还包括了其他的一些重要的配置信息,例如抓取任务的seeds文件,进行抓取的url的范围等。
CrawlController:抓取的核心程序,它读取CrawlOrder来配置内部的模块和参数,同时负责初始化所有的子模块;Web Console也是和它做交互来控制爬虫。
Frontier:它其实就是一个调度器,它内部有一个url队列,保存着需要去抓取的url。同时,从网页中提取到的 url也会送给Frontier,所以,Frontier还有一个功能,对提取后的url进行去重。最后,Froniter进行调度,决定哪个url将被 抓取,然后将这个url放入ToeThreads中;
ToeThreads:这组线程是真正的工作线程,它们完成url的抓取以及一系列的后续工作,如图2-1所示,主要包括:
(1)Pre-fetch Processing: 在抓取前的一些处理;
(2)Fetch Processing: 抓取url对应的网页;
(3)Extractor Processing: 抽取网页中的url,分析网页的信息。
(4)Write/Index Processing: 将网页保存下来,或者写入某个搜索引擎;
(5)Post Processing: 后处理;
每一个从Frontier中调度出来的url都需要经历这些步骤。所以,在爬虫的运行过程中,Frontier和这些Processing Chain构成了一个环,Frontier将需要处理的url放入Processor Chain中,从Processor Chain中提取出的新的url再被放入Frontier中。
图2- 2 heritrix处理一个url的流程
相关推荐
Heritrix 是一个开源的网络爬虫框架,由Internet Archive 发起,用于大规模的网页采集。Heritrix 支持各种复杂的抓取策略和规则,如深度优先、广度优先,以及各种过滤器和钩子,能够有效地抓取互联网上的资源。它...
2. Heritrix:是一个开源的爬虫框架,提供了爬虫技术的实现。 3. Apache Tika:是一个开源的文档解析器,提供了文档解析的实现。 4. JSpider:是一个开源的爬虫引擎,提供了爬虫技术的实现。 5. WebSPHINX:是一个...
本篇将围绕三个主流的开源爬虫框架——Heritrix、Nutch和Scrapy进行深入的调研。 首先,Heritrix是一个由Java编写的开源爬虫框架,它的特点是严格遵循robots.txt协议和META robots标签,确保合法和全面地抓取网站...
通用爬虫的组成在网络爬虫的系统框架中,主过程由控制器、解析器、资源库三部分组成。控制器的主要工作是负责给多线程中的各个爬虫线程分配工作任务。解析器的主要工作是下载网页,进行页面的处理,主要是将一些 JS ...
Heritrix是一款开源的网络爬虫工具,主要用于从互联网上抓取数据。它具有高度的灵活性和可配置性,可以按照用户的需求定制爬取策略。Heritrix的设计考虑到了大规模数据抓取的需求,支持分布式爬取,可以在多台机器上...
Heritrix是一个开源的、基于Java的Web爬虫框架,能够高效地爬取和抽取Web页面的信息。通过使用Heritrix,可以实现自动化的Web信息抽取,提高信息抽取的准确性和效率。 本文的主要贡献在于提出了一种基于Heritrix的...
Heritrix提供了一种灵活的框架,允许开发者针对不同的信息抽取需求定制抓取策略。 【Web信息抽取】 Web信息抽取,也称为Web数据挖掘,是从大量网页中提取结构化的有用信息的过程。这一技术对于从非结构化的Web资源...
Heritrix的设计理念是提供一个灵活、可扩展的框架,允许开发者根据需要定制和配置爬虫的行为,以适应不同的信息抽取任务。Heritrix支持HTTP、HTTPS等多种协议,可以处理JavaScript、CSS、图片等多种类型的Web内容,...
本文深入探讨了设计和开发网络爬虫过程中的关键技术与难点,并对Heritrix爬虫框架的源码进行了分析,进而定制和扩展了爬虫的Extractor、QueueAssignmentPolicy和过滤器等组件,以实现对异步加载网页的高效抓取,并...
2. **Heritrix**:Heritrix 是一个高度可配置的开源网络爬虫框架,它可以模拟浏览器的行为从互联网上抓取数据。通过对Heritrix进行扩展和优化,可以高效地从多个新闻源抓取最新的新闻信息。 3. **中文分词**:由于...
Heritrix是互联网档案馆开发的一款网络爬虫,用于抓取和保存网页内容。在垂直搜索引擎中,Heritrix负责数据的获取和预处理,它能按照设定的规则遍历网站,抓取指定格式的招聘信息,为后续的索引和搜索提供原始数据。...
综上所述,通过结合使用Lucene这样的高性能全文搜索引擎和Heritrix这样的网络爬虫工具,可以构建出功能强大、性能优异的搜索引擎应用。这些工具不仅能够高效地处理大量数据,还能提供高度定制化的搜索体验,满足不同...