基于lucence+heritrix的开源搜索引擎构建
一 Heritrix篇
简介
Heritrix是 一个用java编写的,开源的,可扩展的 网络爬虫工具,严格遵守robot规范。 Heritrix,目前还没有在windows测试过,linux环境测试通过。笔者为了方便开发需要,本文档基于在windows上开发编写的。
第一节 安装和运行Heritrix ,Heritrix的基本配置文件说明
可以到sourceforge上找到heritrix的官方下载地址http://sourceforge.net/projects/archive-crawler下载。
软件支持:
因为heritrix使用java编写的,所以需要jdk,笔者的下载的是目前最新版本的heritrix (1.14.3版本),需要安装jdk1.5以后的版本jdk,故笔者安装了jdk1.6。
硬件支持:
Heritrix对硬件要求不高,默认需要256M内存运行,也可以修改具体见后面对启动脚本的修改部分。
假定 把下载包heritrix1.14.3.zip 解压缩到 E:\develop\opensource\heritrix-1.14.3 目录下。
假定jdk的安装目录是 d:/program files/java 目录下。
设定环境变量
JAVA_HOME D:\Program Files\java\jdk1.6.0_02
HERITRIX_HOME E:\develop\opensource\heritrix-1.14.3\heritrix-1.14.3
设置完成之后,打开dos窗口,进入 $HERITRIX_HOME\bin目录下,运行
heritrix --help
控制台会输出 heritrix启动的命令参数:
Usage: heritrix --help
Usage: heritrix --nowui ORDER.XML
Usage: heritrix [--port=#] [--run] [--bind=IP,IP...] --admin=LOGIN:PASSWORD \
[ORDER.XML]
Usage: heritrix [--port=#] --selftest[=TESTNAME]
Version: @VERSION@
Options:
-b,--bind Comma-separated list of IP addresses or hostnames for web
server to listen on. Set to / to listen on all available
network interfaces. Default is 127.0.0.1.
-a,--admin Login and password for web user interface administration.
Required (unless passed via the 'heritrix.cmdline.admin'
system property). Pass value of the form 'LOGIN:PASSWORD'.
-h,--help Prints this message and exits.
-n,--nowui Put heritrix into run mode and begin crawl using ORDER.XML. Do
not put up web user interface.
-p,--port Port to run web user interface on. Default: 8080.
-r,--run Put heritrix into run mode. If ORDER.XML begin crawl.
-s,--selftest Run the integrated selftests. Pass test name to test it only
(Case sensitive: E.g. pass 'Charset' to run charset selftest).
Arguments:
ORDER.XML Crawl order to run.
运行 heritrix --admin=LOGIN:PASSWORD
至此,heritrix的守护进程就启动起来了。简单吧,不过别高兴,麻烦的事情还在后面。
Heritrix的配置文件:
Heritrix的启动脚本文件是 bin目录下的heritrix文件,java虚拟机的环境设置可以在这个文件里修改,例如前面提到的修改内存大小可以在这个文件中加入:
% JAVA_OPTS="-Xmx512m"
把虚拟机使用的最大内存改成512m
另外也可以在 控制台 在启动heritrix时通过命令行改变heritrix行为,同时也可以修改conf目录下的heritrix.properties文件,来改变heritrix的行为。下面介绍一些heritrix常用的属性配置:
Heritrix.version 配置heritirx的版本
heritrix.jobsdir = jobs 配置 抓取的文件存放路径,默认存放到 $HERITRIX_HOME/jbos 目录下。
heritrix.cmdline.admin = admin:admin 可以在这里写好登录的用户名密码,也可以在启动的时候通过命令行指定
heritrix.cmdline.port = 8080 web ui控制端访问的端口
heritrix.cmdline.run = false 如果设置成true,heritrix在启动时,就会把所有的job启动。
heritrix.cmdline.nowui = false 如果设置成true,会阻止通过web方式操作爬虫 控制台
heritrix.cmdline.order = 如果设置了一个string的 文件目录值,将会使用用户指定的order。Xml文件
heritrix.cmdline.jmxserver = false
heritrix.cmdline.jmxserver.port = 8081
以上配置完成,就可以启动heritrix,并且通过web ui的方式访问了 http://127.0.0.1:8080/admin。进入login页面输入在配置文件中配置的用户名密码。就可以进入控制台了。
第二节 定制第一个网页抓取任务
启动heritrix,通过浏览器访问 http://127.0.0.1:8080/admin, 输入用户名密码,进入控制台。点击job 标签页,点击 with default 使用默认的描述文件创建一个抓取job,打开的窗口:
Name of new job :随便输入一个方面自己记忆的名字
Description: 随便输入
Seeds: 输入要抓取的种子页面。例如要抓取 某个网站的所有产品页面的详细信息,那么种子应该是这些产品的列表页面,也就是说从这个页面可以进入每个产品的详细页面。
填写完成之后点击modules,进入设置页面,可以设置的项比较多,这里只挑几个重点的介绍下:
Select Crawl Scope
BroadScope 从字面上理解应该是最大范围的抓取,个人感觉应该是最大深度的爬取网页
其他的几个,笔者没有用到,暂时不做介绍了,免得写的有出入误导读者。
Select URI Frontier
Url 处理器它将决定下一个被处理的URL是什么。同时,它还会将经由处理器链所解析出来的URL加入到等待处理的队列中去。
BDBFronter heritrix 默认使用的处理器。这个类的具体逻辑没有仔细研究过,因为笔者写了自己的fronter类,来完成处理逻辑,在后面的章节里面介绍
这两个配置是最核心的配置,后面还有5个配置,都是可以自己定制的。大致看下就明白是什么意思了,在这里就不赘述了。特别强调下Select Writers 的配置,主要是用于将所抓取到的信息写入磁盘。通常写入磁盘时有两种形式,一种是采用压缩的方式写入,在这里被称为Arc方式,另一种则采用镜象方式写入。当然处理起来,镜象方式要更为容易一些,因此 用mirror方式存储。
关于module里面配置,如果想了解每个配置节点都是什么意思,可以看下官方文档,里面有有每个选项的详细字典说明
设置完module,点击setting链接,进入job设置页面,这个页面的设置也比较容易理解。这里特殊说下http-headers的配置:
User-agent 模拟浏览器的header,里面请填写客户段的浏览器的user-agent
Mozilla/5.0 (compatible; heritrix/1.14.3 +PROJECT_URL_HERE),把PROJECT_URL_HERE 替换成任意一个带有http的完整链接即可例如:http://192.168.10.123
From 里面随便填写一个email格式的email地址即可,不必是真实的email地址。
其他的配置,都比较容易理解,如果有不清楚的,可以点击每个输入框前面的问号,heritrix会告诉你这个输入框里的值是用来做什么的,应该填写什么值。
这个页面配置完成后,就可以提交job了。提交之后,进入到cosole主控制台页面,应该可以看到刚才创建的job,点击start 开始执行任务了。 在控制台上可以监控到任务执行时,系统的资源消耗情况和任务执行情况,同时也可以随时暂停任务和终止任务。
小结 : 至此一个简单的抓取任务,就建立完成可以开始工作了,但是以上的配置使用的都是heritrix的默认提供的实例来完成的,针对每个垂直搜索引擎,对数据的抓取,都有特定的约束需求,那么就需要定制自己的实例来完成抓取任务,下面我们进入heritrix的开发阶段,定制自己的web爬虫。
第三节 :开发,定制自己的web爬虫