用java开发一个搜索导航网站

时间:2021-11-21 22:08:25
最近用业余时间做了一个搜索导航网站.该网站由定向爬取蜘蛛,网页分析,正文提取,切词,内容生成等模块
构成.全部采用JAVA开发.
   
   在网站开发过程中有不少体会,打算和各位分享
   
   1.  网站定向爬取
      2.   网络蜘蛛
   3.   网页分析,正文抽取
   4.  切词
   5.  内容管理
       
   我将分几个部分陆续和大家讨论

     (1)网站定向爬取

        一般的导航的网站,其内容大多是静态的连接。一个页面一大堆的网站名称连接,看的都头大。而且光看网站名称
     你很判断是否会对这个网站感兴趣。如果我们能把这些网站中的特色频道内容抓取一部分出来,让用户直接根据这些内容
     来决定是否去这个网站浏览,那么用户的体验会好很多。

        目前网络发展速度很快,每天都会新增加很多网站,大多数的个人网站都是三天打鱼两天晒网,质量高,更新频率高的
     网站不是很多,所以在爬取网页的时候需要精心挑选种子网站,把高质量的网站,有特色的网站推荐给用户。
        
     (2)网络蜘蛛开发
        
        爬取蜘蛛的开发,利用了一个开源的软件htmlparser,这个软件做蜘蛛是很不错的,只要提供个URL就能很好的获取页面
     数据流。利用HTMLPARSER很多细节就不用过多的考虑。在爬取网页的时候,重点要解决的是如何识别正文列表。因为一个网页
     上有很多的列表,各种标签都有。如何精确的识别出来是关键。而且,蜘蛛要有自动识别网页变化的功能,当一个网站的内容,
     布局发生变化后,能自动识别。

     (3)网页分析
        
        网页分析的核心是正文提取,正文提取是件非常困难的事情。也是最核心的技术环节,只有抽取的好,识别的准才能被用户所
     接受,否则搜出一堆乱七八糟的文字,谁也没兴趣看。正文抽取目前有很多的技术,但都不是很理想。因为现在的网页布局很复杂,
      不同网站有不同的风格,网页中到处是标签,广告。想做个比较通用的正文抽取程序是相当复杂的。
       
        我尝试过很多办法,但都不理想。后来经过不断的研究,我发先其实正文部分有一个共同的特点,就是绝大多数正文是
     在一个单一的TABLE或者DIV中。如果能识别出这个TABLE或者DIV就能准确的抓取正文。

        沿着这个思路,我不断的尝试。发现这个思路虽然简单,但实现起来确实很复杂。因为这个TABLE,DIV中很可能混入图片,连接
     表格,标签,干扰文字,广告等。如何自动剔除这些干扰需要很复杂的算法。而且在HTML中各种标签互相缠绕,互相干扰。经过一段
     时间的试验,我基本上掌握了抽取正文的技术。抽取的正文样式和原文章中的基本相同,里面的图片,连接,标签也做了很好的处理
     基本上达到实用阶段,大家有兴趣可以上我的网站比对下我抽取的和原文章的差异。欢迎大家赐教。

      网页分析的核心就是正文提取,由于我做的不是搜索引擎,所以抽取的难度要更大些,抽取的内容不能包含无关的文字。而且各种格式

,图片,连接,标签要保持原样,这个比较有挑战性。我个人认为正文识别是个有很高难度的课题,需要不断的研究。

    

     (4)切词
        切词有很重要的作用,主要用于识别正文,去除干扰。我使用正向最大匹配法,自己建立了一个专业词库。效果还不错        


     (5)内容管理
        我的网站使用的全部是静态的HTML页面,利用内容生成模块,把蜘蛛定向爬取的 内容套用模版然后生成网页,由于静态页面
      访问速度快,所以对服务器的压力就相对较小。而且也容易被搜索引擎爬取。