网络爬虫Heritrix应用

lucene+heritrix技术Q Q群:42506208

最近公司要做搜索引擎,目前采用的方案是lucene+heritrix,所以最近开始研究heritrix机制以及配置简单的使用,现将在myeclips下配置的方案拿出来与大家共享。
  
   下载Heritrix-1.12.1 可以到SourceForge.net上去下载,下载地址链接http://sourceforge.net/project/showfiles.php?group_id=73833&package_id=73980

需要下载的压缩文件包有两个,如下:

heritrix-1.12.1.zip 和 heritrix-1.12.1-src.zip

2、解压缩Heritrix-1.12.1文件包

在本地磁盘中解压缩,随便放在一个地方就行,用到的时候,直接从这两个解压缩的文件夹下面拷贝文件即可。

以我的为例,我把他们解压缩到了目录E:\Heritrix下面,

配置过程

1、新建Java Project工程

在Eclipse中新建一个Java Project工程(注意:一定是Java Project的工程,不是Web Project工程),工程名称为Heritrix-1.12.1。

以我的为例,对应地,工程Heritrix-1.12.1在本地磁盘目录D:\eclipse-SDK-3.2.1-win32\workspace下面。

可以在目录D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1下面看到:两个工程属性文件.classpath和.project、两个文件目录bin和src。

删除掉两个文件目录bin和src。

2、向新建的Java Project添加Heritrix-1.12.1文件

(1) 将目录E:\Heritrix\heritrix-1.12.1-src\heritrix-1.12.1\src\java\下面的三个目录:org、com、st一起拷贝到新建工程Heritrix-1.12.1目录下面(绝对路径为D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1)。

(2) 将目录E:\Heritrix\heritrix-1.12.1-src\heritrix-1.12.1\src\conf\下面的:三个目录(包括:modules、profiles、selftest),以及四个文件(包括:heritrix.properties、jmxremote.password.template、heritrix.cacerts、jndi.properties)一起拷贝到新建的工程Heritrix-1.12.1目录下面(绝对路径为D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1)。

(3) 将目录E:\Heritrix\heritrix-1.12.1-src\heritrix-1.12.1\src\resources\下面的三个文件(包括:arcMetaheaderBody.xsl、warcinfobody.xsl、README.txt,其中README.txt没有用处是显而易见的)拷贝到新建的工程Heritrix-1.12.1目录下面(绝对路径为D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1)。

(4) 将目录E:\Heritrix\heritrix-1.12.1\heritrix-1.12.1\下面的webapps目录拷贝到新建工程Heritrix-1.12.1目录下面(绝对路径为D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1),这里,webapps目录下面有两个WAR包(即admin.war和selftest.war)。

3、修改新建的Java Project工程(名称为Heritrix-1.12.1)的配置文件

(1) 打开目录D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1下面的.classpath文件,可以看到共有下面6行:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="bin"/>
</classpath>

可以看到,新建Java Project工程(如我们的,名称为Heritrix-1.12.1)之后,src是资源目录,所以在Eclipse开发平台上,在src下面新建的资源目录呈包结构组织。kind属性指定工程中显示的资源目录,path指定了在该path(Eclipse默认为src)下的资源目录都呈包结构组织。

将上面的内容做很大的修改,修改内容如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/ant-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/bsh-2.0b4.jar"/>
<classpathentry kind="lib" path="lib/commons-cli-1.0.jar"/>
<classpathentry kind="lib" path="lib/commons-codec-1.3.jar"/>
<classpathentry kind="lib" path="lib/commons-collections-3.1.jar"/>
<classpathentry kind="lib" path="lib/commons-httpclient-3.0.1.jar"/>
<classpathentry kind="lib" path="lib/commons-lang-2.1.jar"/>
<classpathentry kind="lib" path="lib/commons-logging-1.0.4.jar"/>
<classpathentry kind="lib" path="lib/commons-net-1.4.1.jar"/>
<classpathentry kind="lib" path="lib/commons-pool-1.3.jar"/>
<classpathentry kind="lib" path="lib/dnsjava-1.6.2.jar"/>
<classpathentry kind="lib" path="lib/fastutil-5.0.3-heritrix-subset-1.0.jar"/>
<classpathentry kind="lib" path="lib/itext-1.2.0.jar"/>
<classpathentry kind="lib" path="lib/jasper-compiler-tomcat-4.1.30.jar"/>
<classpathentry kind="lib" path="lib/jasper-runtime-tomcat-4.1.30.jar"/>
<classpathentry kind="lib" path="lib/javaswf-CVS-SNAPSHOT-1.jar"/>
<classpathentry kind="lib" path="lib/je-3.0.12.jar"/>
<classpathentry kind="lib" path="lib/jetty-4.2.23.jar"/>
<classpathentry kind="lib" path="lib/junit-3.8.1.jar"/>
<classpathentry kind="lib" path="lib/libidn-0.5.9.jar"/>
<classpathentry kind="lib" path="lib/mg4j-1.0.1.jar"/>
<classpathentry kind="lib" path="lib/poi-2.0-RC1-20031102.jar"/>
<classpathentry kind="lib" path="lib/poi-scratchpad-2.0-RC1-20031102.jar"/>
<classpathentry kind="lib" path="lib/servlet-tomcat-4.1.30.jar"/>
<classpathentry kind="output" path=""/>
</classpath>

其中:

上面的<classpathentry kind="src" path=""/>中,指定src为"",这表示,只要在该工程的根目录下面建的目录资源都呈现表结构组织;

上面的kind为lib,对应的就是我们拷贝到工程目录下面的lib(绝对路径为D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1\lib),path的值就是该lib目录(绝对路径为D:\eclipse-SDK-3.2.1-win32\workspace\Heritrix-1.12.1\lib)下面的所有的jar文件。


4、配置CLASSPATH

可以看到,目录E:\Heritrix\heritrix-1.12.1-src\heritrix-1.12.1\lib\目录下有26个JAR包(大小为8.13MB)


这时,切换到Eclipse平台的窗口,刷新该新建的Java Project工程(名称为Heritrix-1.12.1),会发现出现了很多包结构,但是有很多红色错误的标记


这是因为还没有设置CLASSPATH。右键单击工程,选择【Build Path】—> 【Add External Archives】在弹出的窗口中选择添加目录E:\Heritrix\heritrix-1.12.1-src\heritrix-1.12.1\lib下面的26个jar包文件



现在可以看到,我们新疆的的Java Project工程(名称为Heritrix-1.12.1)中没有红色的错误标记了。

5、修改heritrix.properties属性文件

打开heritrix.properties属性文件,可以看到默认情况下,Heritrix-1.12.1的属性文件如下所示:

##############################################################################
# H E R I T R I X P R O P E R T I E S
##############################################################################

# Properties with 'heritrix.' or 'org.archive.crawler.' prefix get loaded
# into System.properties on startup so available via System.getProperties.

# Version is filled in by the maven.xml pregoal. It copies here the project
# currentVersion property.
heritrix.version = @VERSION@

# Location of the heritrix jobs directory.
heritrix.jobsdir = jobs

# Default commandline startup values.
# Below values are used if unspecified on the command line.
heritrix.cmdline.admin =
heritrix.cmdline.port = 8080
heritrix.cmdline.run = false
heritrix.cmdline.nowui = false
heritrix.cmdline.order =
heritrix.cmdline.jmxserver = false
heritrix.cmdline.jmxserver.port = 8081

上面四行红色标识的代码行,一般来说,需要修改。

第一行,heritrix.version指定了Heritrix的版本号,因为我们测试的是版本号为1.12.1,修改为:

heritrix.version = 1.12.1

第二行,heritrix.jobsdir指定了Heritrix在执行抓取任务时,抓取到的内容存放的目录,默认在工程下面的jobs目录下面。

第三行,heritrix.cmdline.admin指定了登录WebUI时使用的帐号,默认为空,可以自己随意设定,设定需要按照一定的格式(用户名:密码),我们修改为:

heritrix.cmdline.admin = shirdrn:maomao

其中,用户名和密码使用“:”分隔。

第四行,heritrix.cmdline.port指定了运行Heritrix后台程序,监听的WebUI使用的端口号,默认为8080端口,可以设置一个当前没有占用的端口号,比如我们修改为:

heritrix.cmdline.port = 8085

6、启动Heritrix后台程序

回到Eclipse平台窗口,找到新建的Java Project工程Heritrix-1.12.1中,资源包org.archive.crawler下面的Java类文件Heritrix.java,右键单击Heritrix.java文件,选择【Run As】—> 【Java Application】选项,便看见Heritrix后台已经启动了,在Eclipse控制台【Console】中可以看到启动过程的详细信息

信息的文本内容为,可以参考如下:

05:32:29.765 EVENT Starting Jetty/4.2.23
05:32:30.078 WARN!! Delete existing temp dir C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Jetty_127_0_0_1_8085__ for WebApplicationContext[/,jar:file:/D:/eclipse-SDK-3.2.1-win32/workspace/Heritrix-1.12.1/webapps/admin.war!/]
05:32:30.625 EVENT Started WebApplicationContext[/,Heritrix Console]
05:32:31.093 EVENT Started SocketListener on 127.0.0.1:8085
05:32:31.093 EVENT Started org.mortbay.jetty.Server@179c285
Heritrix version: 1.12.1

7、登录WebUI

现在,可以成功登录WebUI,设置抓取任务了。

在浏览器地址栏中键入地址链接 http://localhost:8085,可以看到WebUI登录界面

使用前面的配置的帐户shirdrn:maomao就可以登录了


8、 当启动WebUI后我们来简单配置一个抓取任务:

1:heritrix1.21.1;

2:找到Heritrix-1.12.1中,资源包org.archive.crawler下面的Java类文件Heritrix.java,右键单击Heritrix.java文件,选择【Run As】—> 【Java Application】选项,便看见Heritrix后台已经启动了,在Eclipse控制台【Console】中可以看到启动过程的详细信息

3:登录WebUI,在浏览器地址栏中键入地址链接 http://localhost:8020 注:如果你的8020端口被占用,就到heritrix.properties配置文件中找到heritrix.cmdline.port = 8020,修改成你所需要的端口就可以。

4:登陆用户名和密码是:jcauto 注如果需要修改到heritrix.properties配置文件中找到heritrix.cmdline.admin = jcauto\:jcauto 第一个jcauto是用户名,第二个是密码

5:创建抓取任务:(1)单击WebUI菜单栏上的“Jobs”标签,就可以进入任务创建页面

(2)选择With defaults 方式

(3)在新建任务的名称上,如填入“Sohu_news”,表示该抓取任务将抓取搜狐的新闻信息。在Description中随意填入字符,然后再在seeds框中,填入搜狐新闻的网址。

(4)点击左下第一个按钮Modules继续配置

(5)找到Select Writers ,去掉org.archive.crawler.writer.ARCWriterProcessor,然后在下拉框中选择org.archive.crawler.writer.MirrorWriterProcessor 进行添加

(6)配置最上面的Settings,进入后找到Mozilla/5.0 (compatible; heritrix/@VERSION@ +PROJECT_URL_HERE),将@VERSION@改成1.21.1,将PROJECT_URL_HERE改成http://127.0.0.1。将下面的CONTACT_EMAIL_ADDRESS_HERE改成一个有效的信箱地址即可。

(7)点击最上面的Submit Job 这样就创建了一个抓取工程。

(8)点击Console,会看到一个工程已经创建好,点击strat,开始抓取地址。

(9)抓取后的地址都存放在工程的jobs目录下的mirror目录里。




最后说明

Heritrix真正配置成功后,应该能够进行抓取任务。有的时候,上面的配置能够正常进行启动Heritrix后台程序,并且能够登录WebUI进行任务设置,但是抓取的时候就出问题了。问题可能是因为安装的时候配置有问题,也可能是在设置抓取任务的时候任务属性设置有问题








你可能感兴趣的:(eclipse,maven,网络应用,Lucene,XSL)