菜鸟也想玩搜索引擎——JobSearch简介

  这一篇将简要介绍一下JobSearch的结构,同时发下源码,来点干货,等过两天闲的时候将围绕这个程序简单介绍搜索引擎的各部分,同时谈谈个人的一些理解。程序写的比较简单,基础好的话很容易就能看懂(因为写的比较早,所以代码比较乱,还望各位勿喷啊)。

  SVN地址:http://code.taobao.org/svn//jobsearch/trunk

  源文件下载地址:https://files.cnblogs.com/good-temper/jobsearch.rar

1、程序结构

  程序框架如下:

  

     (1)、爬虫从招聘网站通过列表页抓取招聘页面,将招聘信息解析出后存入数据库

     (2)、通过Luence实现的索引器存数据库读取解析出来的信息,进行分词并建立索引文件

     (3)、用户输入关键词提交给查询器

     (4)、查询器将关键词分词并检索索引文件,获得匹配的记录集合,根据记录的id查询数据库取出数据反馈给用户。(这里偷了个懒,建立索引是直接将数据表所有字段都存进了索引文件,这样查询时就不需要读取数据库了,但是这是一个非常糟糕的设计,原因以后详细分析时会说明)

  程序的源文件结构如下:

//需要说的是部分文件是从更早期的一个爬虫程序里边拷贝过来的,原项目是gbk的,而本项目是utf-8的,所以有部分中文注释乱码,而且一些文件没有用到
JobSearch
  com.crawler.action               //这个就不解释了,struts你懂得
  
com.crawler.analysis              //解析包,本来想用htmlparser,后来觉得挺简单的就直接自己写正则了
        ContentAnalysis.java          //内容页解析类
        ListAnalysis.java            //列表页解析类
  com.crawler.contraller             //控制包
        Contraller.java             //总控类,所有抓取爬虫都在此启动
        job51Contraller.java          //51Job的抓取控制类,主要是启动多个线程进行抓取,并维护一个链接队列进行任务调度
  com.crawler.database              //数据库操作
        MysqlOperater.java            //mysql操作类
        SqliteOperater.java            //sqlite的操作类,我自己写的小程序喜欢用sqlite,轻量级且方便移植。这里本来打算用的,最后因多种原因未使用。
  com.crawler.entity               //实体类,当时百度出的这个单词......好吧,今天知道人们其实更喜欢写成model
        Queue.java                //队列接口
        ArrayQueue.java             //队列类,为甚么要自己实现?因为当时不知道java已经实现了Queue,就在网上考了一个,当然看了下代码其实很简单,使                               用了模板,而且线程安全
        SearchResult.java            //查询结果类
        SimpleContent.java            //简单格式的置为内容类,这个......我也忘了当时为啥要定义这个,难道想减少客户端请求时传递的信息量?
        PageContent.java             //页面内容类,用来存储页面解析后的信息
        UrlInfo.java               //Url信息类
 com.crawler.filter                //本来打算实现过滤器的,实现链接的滤重,但是最后偷懒直接比对的数据库,就没实现。这个之前实现过,采用的Bloom Filter                             实现,之后细讲会讲到的
 com.crawler.htmlop                //html操作
        GetHtml.java               //请求网路获取html文件
 com.crawler.io                  //io操作
        FileOperater.java            //主要将html文件保存至本地,这里没有用到,但是这样做对于一个真正高校的搜索引擎其实
 com.crawler.luence                //luence操作
        InfoIndex.java              //索引文件操作类,建立、更新、查询索引都在这里边,其实包含了索引器和查询器,这里代码写的有点烂。
 com.crawler.tool                 //一些工具类
        ComputeMD5.java              //生成MD5值,最为数据主键
        DataOp.java                 //日期格式处理
        PropertiesOp.java             //读取配置文件属性,爬虫的一些信息通过.properties文件配置,包括爬去列表页起始地址、列表链接正则、爬去分类等                                ,这样做主要是希望增强可拓展性,之后通过添加XXXContraller类和配置文件就能实现对新网站的爬去(这样其实还是 有缺陷)
//最后,应该是controller,而不是contraller,好吧,没文化真可怕。

2、如何配置程序

  2.1 导入项目

    可以svn签入或者下载源文件导入,我用的myeclipse9.0,但是开发用的myeclipse8.5,所以8.5以上版本应该都行。

  2.2   初始化数据库

    脚本文件在sql文件加下,里边已经有一些数据,但是建议把数据清空(因为对应没索引文件没拷,这些数据也查询不出来)。

  2.3   抓取数据

    运行程序,将程序部署至tomcat,打开:http://localhost:8080/JobSearch/index.jsp

    点击右上角的“抓取设置”,按照下图执行点击1、2,暂时不要执行3。

    这是可以在控制台看到输出抓取日志信息:

  2.4  对抓取信息建立索引

    在抓取了一段时间后(可以看看数据库,差不多positioninfo表有个千吧条信息时,反正是测试下,用不着抓太多),点击上边的3开始建立索引。这里需要提到是由于代码对异常处理的有问题,长时间运行后会出现异常信息,一般情况下忽略即可(比如一些链接请求失败很正常),但是有时候你会发现列表页解析速度很快,内容页个很长时间才完成一个,这个一般重启即可,不必担心重复抓取,抓取状态数据库保存的有。

    建立索引将是个很长的时间,而且建议在抓取停止后在去建立索引(怎么停止?这个....没写,直到列表信息抓取完就停止了,或者你重启下tomcat也行,反正是个练手项目,也不追求十全十美......),否则很可能你等很长时间也不见结束。

  2.5  万事具备,搜索吧

    打开主页,填写关键词(最好和抓取分类相关)和条件,点击搜索,会惊喜的发现页面显示了搜索结果。但是同时你也可能会小小的失望:有时候搜索结果准确度并不是那么高。这个主要和分词器以及luence的使用有关,因为我只是简单的使用了下,并未做相关排名,而且分词器分词不一定准确(这个牵扯很多原因,也是搜索引擎需要解决的核心问题之一,以后我会说下我所了解的解决思路)。

  最后来几张效果图,然后睡觉去。

 

    

     

posted @ 2013-04-10 01:04  oO脾气不坏Oo  阅读(2337)  评论(10编辑  收藏  举报