首页 > 范文大全 > 正文

网络论坛爬虫的设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇网络论坛爬虫的设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:该文首先通过设计一种论坛爬虫程序来获取多个网络论坛中的帖子,并将这些不同格式的帖子转换成统一格式的XML文件,最后将这些XML文件转为倒排文档的索引文件,从而满足了用户对多论坛信息获取的需求。

关键词:论坛爬虫;网络论坛;信息聚合

中图分类号:TP393文献标识码:A文章编号:1009-3044(2012)03-0570-03

网络论坛作为一种信息交流的平台蕴含着大量由用户发表的主题信息,目前互联网上出现了越来越多的具有较高信息聚合度的网络论坛,它们分散在互联网的各个角落,形成了新的“信息孤岛”。用户往往需要访问多个网络论坛来获取这些分散的信息。因此,有必要整合这些“信息孤岛”中的信息,为用户提供统一的访问接口来获取网络论坛中的信息。

该文首先通过设计一种论坛爬虫程序来获取多个网络论坛中的帖子,并将这些不同格式的帖子转换成统一格式的XML文件,最后将这些XML文件转为倒排文档的索引文件,从而满足了用户对多论坛信息获取的需求。

1网络论坛分析

为了整合多个论坛中的信息就需要对多个论坛的信息进行分析并抽象出共同的特征。目前,绝大数论坛都是由板块和帖子构成,即若干主题相关的帖子聚合形成板块,若干板块聚合构成论坛。每个论坛中的帖子地址和板块地址都具有相同的URL地址格式。帖子的URL地址显示了该帖子的内容;而板块的URL地址显示的是帖子标题列表,由于一个板块具有多个帖子,所以往往要划分为多个页面来显示,所以这里的板块URL地址是第一页,通过翻页地址可以链接到该板块的下一页。以“采购经理人论坛”网站为例,帖子的URL地址格式如下:

以下是“采购经理人论坛”中某个帖子的保存路径,从保存路径中可以分析出该帖子属于10号板块,于2011年12月2日被保存。bbs.省略.html\board10\board10_20111202\article120.html

2.4提取内容

提取程序的功能是将帖子的保存形式从html格式转化为xml格式。不同论坛中的帖子格式不尽相同,但是都包括如下信息:帖子的标题、帖子的地址、帖子的发表时间、帖子的内容、帖子所属的论坛。帖子在保存为html文件后将被提取程序转换为xml文件,xml文件的结构如下所示。

什么样的人可以做采购呢?

采购经理人论坛

\board10\board10_20111202\article120.xml

可以看出xml文件的存储也采用了论坛域名、板块编号、处理日期三级目录结构。

提取程序首先从数据库中读取所有visitedFlag=1的记录并将这些记录都封装成ArticleBean实体类,再根据ArticleBean中的boardId字段、saveDate字段构成帖子的html文件存储路径和xml文件存储路径,最后从html文件中提取相关信息到xml文件中。

检测html文件的页面编码是提取程序的关键点。检测页面编码的程序采用三种中文编码:“gbk”、“gb2312”、“utf8”分别来解析html页面,如果某种编码解析出的html节点全部有效,则该编码就是页面编码;如果这种策略失败,则采用utf8编码去解析html页面,并查找页面中是否存在charset属性,并提取出charset属性的值作为当前页面编码。由于同一论坛的所有帖子的页面编码都相同,为了避免每次提取内容时都检测页面编码,应该将首次检测出的页面编码保存到SiteInfo数据表中。

检测出页面编码后就可以借助HtmlParser2.0来解析出帖子的有效内容、发表时间等信息。帖子的有效内容都包含在一个具有id属性的html标签中,以“采购经理人论坛”为例,帖子的有效内容包含在id值为postmessage_[d]+的html元素中。预先将内容标识contentFlag存放在SiteInfo数据表中,在读取论坛基本信息的时候该contentFlag被封装到SiteBean实体类中。提取有效内容的具体过程如图3所示。在提取过程中将发现的有效内容放入到StringBuffer缓冲区中,最后采用Dom4J开源包将StringBuffer的内容写入到xml文件中。

图2提取帖子内容

3索引文件设计

爬虫程序生成的xml文件不能直接提供给搜索引擎使用,必须采用“倒排文档”技术生成索引文件。Lucene是一款开源的搜索引擎开发框架,它提供了制作索引的API接口。由于Lucene自带的分词包对中文的支持效果不是很好,本文采用了开源的paoding分词器,先将paoding分词器封装成符合Lucene要求的分词器,然后再使用这种分词器创建Lucene索引。在建立索引之前,设置索引的合并因子为50,设置文档在内存中的数目为100,这可以提高建立索引的效率。

考虑到论坛中的帖子是海量数据,在读取xml文件时如果直接采用递归的方法遍历文件目录,容易产生栈内存溢出,因此本文根据ArticleInfo数据表中保存的boardId字段、saveDate字段生成该记录所对应的xml文件存储路径,根据路径直接读取xml文件,避免了栈内存溢出,也提高了处理速度。

本文对多个论坛分别建立索引文件并将索引文件保存到以“论坛域名.index”的形式命名的文件目录中。以“采购经理人论坛”为例,其对应的索引文件保存在名称为“bbs.省略.index”的目录中。搜索程序将读取所有以“.index”结尾的文件目录,并采用多线程技术同时对多个论坛的索引文件进行搜索。

4结束语

本文分析了互联网中多个论坛所形成的“信息孤岛”问题,提出了对多个论坛进行信息聚合的必要性,同时设计了基于多个论坛的搜索引擎框架。尤其是对面向多个论坛进行信息获取的爬虫程序进行了深入的分析。

参考文献:

[1]陈丽君.深层网网络爬虫设计[J].计算机与信息技术,2009(Z2).

[2]陈哲.垂直搜索中网页抓取技术的研究[J].科技信息,2009(22).

[3]贺财平,覃事刚,刘建勋.Web服务搜索引擎的设计与实现[J].计算机应用与软件,2011(1).

[4]刘明辉,张志平,张新民.网络资源聚合方法探析[J].机械管理开发,2008(5).

[5 ]王舜燕,李蕾,吴兵华.基于ID3分类算法的深度网络爬虫设计[J].现代图书情报技术,2008(6).

[6]詹恒飞,杨岳湘,方宏.Nutch分布式网络爬虫研究与优化[J].计算机科学与探索,2011(1).

[7]陈汶滨,夏学梅.基于聚焦爬虫的手机天气预报系统[J],今日科苑,2009(2).

[8]刘磊安,符志强.省略网络爬虫的设计与实现[J].电脑知识与技术,2010(8).

[9 ]潘春华,常敏.武港山.面向Web的信息收集工具的设计与开发[J].计算机应用研究,2002(6).

[10]刘洁清,吴京慧.面向主题的个人实时搜索引擎的设计与实现[J].现代图书情报技术,2006(5).