150 likes | 679 Views
Heritrix. Heritrix 介绍. 在一个搜索引擎的开发过程中,使用一个合适的爬虫来获得所需要的网页信息是第一步,这一步是整个系统成功的基础。 Heritrix 是一个纯由 Java 开发的、 开源 的 Web 网络爬虫,用户可以使用它从网络上抓取想要的资源。 它来自于 www.archive.org 。 Heritrix 最出色之处在于它的 可扩展性 ,开发者可以扩展它的各个组件,来实现自己的抓取逻辑。 . Java 开源 Web 爬虫 1. Heritrix
E N D
Heritrix介绍 • 在一个搜索引擎的开发过程中,使用一个合适的爬虫来获得所需要的网页信息是第一步,这一步是整个系统成功的基础。 • Heritrix是一个纯由Java开发的、开源的Web网络爬虫,用户可以使用它从网络上抓取想要的资源。 • 它来自于www.archive.org。 • Heritrix最出色之处在于它的可扩展性,开发者可以扩展它的各个组件,来实现自己的抓取逻辑。
Java开源Web爬虫 1 • Heritrix • Heritrix是一个开源,可扩展的web爬虫项目。Heritrix设计成严格按照robots.txt文件的排除指示和META robots标签。 • WebSPHINX • WebSPHINX是一个Java类包和Web爬虫的交互式开发环境。Web爬虫(也叫作机器人或蜘蛛)是可以自动浏览与处理Web页面的程序。WebSPHINX由两部分组成:爬虫工作平台和WebSPHINX类包。 • WebLech • WebLech是一个功能强大的Web站点下载与镜像工具。它支持按功能需求来下载web站点并能够尽可能模仿标准Web浏览器的行为。WebLech有一个功能控制台并采用多线程操作。 • Arale • Arale主要为个人使用而设计,而没有像其它爬虫一样是关注于页面索引。Arale能够下载整个web站点或来自web站点的某些资源。Arale还能够把动态页面映射成静态页面。 • J-Spider • J-Spider:是一个完全可配置和定制的Web Spider引擎.你可以利用它来检查网站的错误(内在的服务器错误等),网站内外部链接检查,分析网站的结构(可创建一个网站地图),下载整个Web站点,你还可以写一个JSpider插件来扩展你所需要的功能。 • spindle • spindle 是一个构建在Lucene工具包之上的Web索引/搜索工具.它包括一个用于创建索引的HTTP spider和一个用于搜索这些索引的搜索类。spindle项目提供了一组JSP标签库使得那些基于JSP的站点不需要开发任何Java类就能够增加搜索功能。
Java开源Web爬虫 2 • Arachnid • Arachnid: 是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。 Arachnid的下载包中包含两个spider应用程序例子用于演示如何使用该框架 • LARM • LARM能够为Jakarta Lucene搜索引擎框架的用户提供一个纯Java的搜索解决方案。它包含能够为文件,数据库表格建立索引的方法和为Web站点建索引的爬虫。 • JoBo • JoBo 是一个用于下载整个Web站点的简单工具。它本质是一个Web Spider。与其它下载工具相比较它的主要优势是能够自动填充form(如:自动登录)和使用cookies来处理session。JoBo还有灵活的下载规则(如:通过网页的URL,大小,MIME类型等)来限制下载。 • snoics-reptile • snoics -reptile是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,把这个网站所有的能用浏览器通过GET的方式获取到的资源全部抓取到本地,包括网页和各种类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至硬盘内,并能保持原有的网站结构精确不变。只需要把抓取下来的网站放到web服务器(如:Apache)中,就可以实现完整的网站镜像。 • Web-Harvest • Web-Harvest是一个Java开源Web数据抽取工具。它能够收集指定的Web页面并从这些页面中提取有用的数据。Web-Harvest主要是运用了像XSLT,XQuery,正则表达式等这些技术来实现对text/xml的操作。
Heritrix & Nutch • 二者均为Java开源框架,Heritrix 是 SourceForge上的开源产品,Nutch为Apache的一个子项目,它们都称作网络爬虫/蜘蛛( Web Crawler),它们实现的原理基本一致:深度遍历网站的资源,将这些资源抓取到本地,使用的方法都是分析网站每一个有效的URI,并提交Http请求,从而获得相应结果,生成本地文件及相应的日志信息等。 • Heritrix 是个 "archival crawler" -- 用来获取完整的、精确的、站点内容的深度复制。包括获取图像以及其他非文本内容。抓取并存储相关的内容。对内容来者不拒,不对页面进行内容上的修改。重新爬行对相同的URL不针对先前的进行替换。爬虫通过Web用户界面启动、监控、调整,允许弹性的定义要获取的URL。 • 二者的差异: • Nutch 只获取并保存可索引的内容。Heritrix则是照单全收。力求保存页面原貌 • Nutch 可以修剪内容,或者对内容格式进行转换。 • Nutch 保存内容为数据库优化格式便于以后索引;刷新替换旧的内容。而Heritrix 是添加(追加)新的内容。 • Nutch 从命令行运行、控制。Heritrix 有 Web 控制管理界面。 • Nutch 的定制能力不够强,不过现在已经有了一定改进。Heritrix 可控制的参数更多。
Heritrix工作原理 • Heritrix是一个爬虫框架,可加如入一些可互换的组件。它的执行是递归进行的,主要有以下几步: • 在预定的URI中选择一个。 • 获取URI • 分析,归档结果 • 选择已经发现的感兴趣的URI。加入预定队列。 • 标记已经处理过的URI
处理器链 • 预取链 • 主要是做一些准备工作,例如,对处理进行延迟和重新处理,否决随後的操作。 • 提取链 • 主要是获得资源,进行DNS转换,填写请求和响应表单 • 抽取链 • 当提取完成时,抽取感兴趣的HTML,JavaScript,通常那里有新的也适合的URI,此时URI仅仅被发现,不会被评估 • 写链 • 存储爬行结果,返回内容和抽取特性,过滤完存储。 • 提交链 • 做最後的维护,例如,测试那些不在范围内的,提交给边 界部件
安装 • Heritrix所用到的工具类库都存于lib下 • heritrix-1.12.1.jar是Heritrix的Jar包。 • 在Heritrix目录下有一个conf目录,其中包含了一个很重要的文件:heritrix.properties。 • 在heritrix.properties中配置了大量与Heritrix运行息息相关的参数,这些参数主要是配置了Heritrix运行时的一些默认工 具类、WebUI的启动参数,以及Heritrix的日志格式等。 • 当第一次运行Heritrix时,只需要修改该文件,为其加入WebUI的登录名和密 码,如图10-2所示。
启动方式 • Heritrix有多种方式启动,例如,可以使用CrawlController,以后台方式加载一个抓取任务,即为编程式启动。 • 不过最常见的还是以WebUI的方式启动它。
4种创建任务的方式 • Based on existing job:以一个已经有的抓取任务为模板,创建所有抓取属性和抓取起始URL的列表。 • Based on a recovery:在以前的某个任务中,可能设置过一些状态点,新的任务将从这个设置的状态点开始。 • Based on a profile:专门为不同的任务设置了一些模板,新建的任务将按照模板来生成。 • With defaults:这个最简单,表示按默认的配置来生成一个任务。
order.xml • 在Heritrix中,一个任务对应一个描述文件。这个描述文件的默认的名称为order.xml。 • 每次创建一个新任务时,都相当于生成了一个 order.xml的文件。 • 文件中详细记录了Heritrix在运行时需要的所有信息。例如,它包括该用户所选择的Processor类、 Frontier类、Fetcher类、抓取时线程的最大数量、连接超时的最大等待时间等信息。 • 上面所说的4种创建抓取任务的方式,其实都是在生成一个 order.xml文件。 • 关于order.xml的细节,不必深究。因为它里面所有的内容,都会在WebUI上看到。
Modules • CrawlScope用于配置当前应该在什么范围内抓取网页链接。比如,如果选择BroadScope,则表示当前抓取的范围不受限制,但如果选择了HostScope,则表示抓取的范围在当前的Host内 • Frontier则是一个URL的处理器,它将决定下一个被处理的URL是什么。同时,它还会将经由处理器链所解析出来的URL加入到等待处理的队列中去。 • PreProcessor:这个队列中,所有的处理器都是用来对抓取时的一些先决条件做判断的。比如判断robot.txt的信息等,它是整个处理器链的入口。 • Fetcher:从名称上看,它用于解析网络传输协议,比如解析DNS、HTTP或FTP等。 • Extractor:它的名字就很好的揭示了它的作用。它主要用是于解析当前获取到的服务器返回内容,这些内容通常是以字符串形式缓存的。在这个队列中, 包括了一系列的工具,如解析HTML、CSS等。在解析完毕,取出页面中的URL后,将它们放入队列中,等待下次继续抓取。 • Writer:主要是用于将所抓取到的信息写入磁盘。通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入。当然处理起来,镜象方式要更为容易一些, • PostProcessor:在整个抓取解析过程结束后,进行一些扫尾的工作,比如将前面Extractor解析出来的URL有条件的加入到待处理队列中去。
settings • max-toe-threads • 该参数的含义很容易了解,它表示Heritrix在运行该抓取任务时,为任务分配多少个线程进行同步抓取。而事实上在机器配置和网络均很好的情况下,设置50个线程数就已经足够使用了。 • HTTP-Header • 在HTTP-Header这个属性域下面,包括两个属性值“user-agent”和“from”。 • “@VERSION@”字符串需要被替换成Heritrix的版本信息。 • “PROJECT_URL_HERE”可以被替换成任何一个完整的URL地址。 • “from”属性中不需要设置真实的E-mail地址,只需是格式正确的邮件地址就可以了。
-Xmx512m • 使用Heritrix时,考虑到内存的影响,可为其分配512M的最大HeapSize,可以增大Heritrix的最大可用内存, • -Xmx512m • -Xms set initial Java heap size-Xmx set maximum Java heap size-Xss set java thread stack size
课堂练习:任务的设置方法 • Heritrix简单任务的设置方法 • Conf/heritrix.properties • jmxremote.password • profiles • 启动Heritrix • webUI • 抓取参数设置 • 运行抓取任务