长颈鹿Giraffe

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

参考了一些论文和网上的资料以及清华大学出版社出版的《自己动手写网络爬虫》这本书中的部分章节,设计了主题爬虫的主要体系结构如下图所示:

 

         Heritrix是一个由 java 开发的、开源的网络爬虫,我参考网上的一些文章分析了其部分关键功能的代码,然后借鉴其几个比较好的地方实现了一个通用爬虫的主要功能。下面是我实现的爬虫中几个个人认为比较好的地方。

1)        可配置性:通过.properties配置文件可以配置该爬虫所使用的线程数、线程等待时间,连接超时时间,可爬取文件类型和下载目录等。

2)        爬虫礼仪:解析站点根目录下的robots.txt文件,遵循爬虫禁止协议、以及避免对服务器资源的过度使用等。

3)        爬取效率方面:采用可以调节的方式控制线程数量,并且适度加锁。

4)        内存性能方面:使用Berkeley DB来避免使用内存队列时大数量导致内存溢出的问题。采用Berkeley DB来管理url,对每一个访问的url分配一个递增的docid,简单的解决了url消重问题。同时用Berkeley DB来管理待爬取和正在爬取的队列。

       主题爬虫与通用爬虫最主要的区别在于有页面主题相关度计算的模块,这涉及到给定主题的特征关键向量(关键字和权值)的提取,以及爬取到页面的内容与主题相关度的计算。

       关于主题的特征向量提取,我的想法是对给定的主题,在元搜索引擎中爬取搜索到的前20或更多网页,然后对其内容进行分词处理,并通过TF-IDF来计算其中单词的权值,并取权值最高的前30个词作为该主题的关键词。我也对此进行了一些实验,但是发现实验结果并不太理想,比如我以“软件工程”为主题,但很多与软件工程相关的网页中一些明显相关的关键词通过TF-IDF计算出来的权值并不高,我分析的原因可能是由于在TF-IDF公式中,如果某个词在每一篇文档中都出现的话,那么则认为它的权值较低,而类似于“软件工程”这样的词语一定会在几乎每篇与软件工程相关的网页中出现。

       而主题相关度的计算上,我的想法是通过SVM向量模型计算父页面与主题的相关度,同时结合url锚文本与主题的相关程度,同时决定该url的权值,然后根据url的权值排序,权值高的优先爬取,权值低的url也要加入到队列中,只是优先级较低,所以这样也可以简单地解决主题爬虫的隧道效应。

      目前还只实现了通用爬虫的功能...to be continue...

posted on 2011-12-09 15:54  长颈鹿Giraffe  阅读(1780)  评论(0编辑  收藏  举报