herodby
技术 笔记
posts - 14,  comments - 14,  trackbacks - 0

         最近一直想写个和搜索相关的东东,所以简单了解搜索引擎方面的知识,个人总结一个垂直搜索引擎 包含以下几个部分:
         1   web 爬虫,抓取目标页面的内容。
         2  数据预处理,把抓取下来的数据进行去噪,例如使用htmlparser等工具对去掉无用的标签数据等等,把 
             数据结构化DB或者其他存储系统已被后面使用。
         3. 建立索引。
         4. 分词,开发检索因子, 对索引数据进行检索。
         5. 把检索到的数据,在web段展现。
  下面就结合heritrix1.14.3  和lucence2.2.0,介绍下,整个搜索引擎的开发过程。

基于lucence+heritrix的开源搜索引擎构建
         

    基于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  如果设置成trueheritrix在启动时,就会把所有的job启动。

heritrix.cmdline.nowui = false  如果设置成true,会阻止通过web方式操作爬虫 控制台

heritrix.cmdline.order =  如果设置了一个string的 文件目录值,将会使用用户指定的orderXml文件

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爬虫

      
   本人的word的文档暂时写到这里,明天继续补充。
posted on 2009-06-26 02:35 邓兵野 阅读(3614) 评论(2)  编辑  收藏

FeedBack:
# re: 基于lucence+heritrix的开源搜索引擎构建(一)
2009-06-30 22:10 | hongyejie@tom.com
能帮个忙么?我有段JAVA编写的爬虫程序,是老师布置的,让我们注释,实在太难了,我不会!你能帮我注释一下吗!?
姓名是我的邮箱,希望你能给我邮件!!谢谢!  回复  更多评论
  
# re: 基于lucence+heritrix的开源搜索引擎构建(一)[未登录]
2009-07-16 17:24 | google
500块钱,我帮你写;哈哈。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 

<2009年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(2)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜