通用论坛正文提取
本文旨在设计一个通用的网络爬虫算法,用于从各类论坛中提取主题帖和回帖的标题、作者、发帖/回帖时间以及正文内容,并去除噪声数据。核心观点是通过分析论坛网页结构的共性规律,结合特征词库、噪声词库和正则表达式等技术,实现对不同论坛的智能提取。
挖掘目标
在互联网数据高速增长的时代,从海量网页数据中提取有价值信息的需求日益增加。本文的目标是设计一个通用网络爬虫,能够针对任意BBS类型的网页,获取其HTML文本内容,并智能提取主题帖和所有回帖的关键信息(标题、作者、发帖/回帖时间、正文),以JSON格式存储。
全文脉络图
爬虫流程主要包括:分析网页结构、定位主题帖和回帖、提取关键信息、去除噪声数据、存储结果。
爬虫技术简介
- 爬虫简介:网络爬虫是自动提取网页的程序,分为通用网络爬虫、聚焦网络爬虫、增量式网络爬虫和深层网络爬虫。本文采用通用网络爬虫,针对所有论坛进行数据提取。
- 正则表达式介绍:正则表达式是一种用于描述字符串操作的逻辑公式,具有灵活性、逻辑性和功能性,广泛应用于文本编辑器中。
具体步骤
解题思路
基于对论坛网页结构共性的分析,提出以下规律:
- 文字顺序规律:标题通常出现在时间、作者、正文之前。
- 中文命名习惯:注册、登录、积分等词汇具有通用性。
- 时间格式规律:时间通常精确到分钟甚至秒,格式统一。
- 超链接规律:大多数带有超链接的文字不是正文。
- 作者URL规律:统一论坛的不同作者空间,其URL通常有重叠部分。
- 回帖楼层规律:回帖楼层的布局通常相似。
算法核心是过滤噪声信息,通过部分有效信息精确定位。将论坛帖子分为左右结构和上下结构两种类型,分别设计相应的算法。
提取主题帖
- 提取标题:
- 方法一:从
<head>标签下的<title>中提取,使用分隔符(如-、|、_)分割文本,取第一个部分。
- 方法二:建立标题特征词库(如“标题”、“主题”、“题目”),在
<body>标签下的<h1>、<h2>、<h3>和<title>中查找包含特征词的标签,提取其后的文本。
- 提取时间:
- 使用正则表达式匹配时间格式,建立时间特征噪声词典,过滤噪声数据,取匹配到的第一个时间作为发帖时间。
- 提取作者:
- 标签特征法:查找包含正则表达式
^auth|^us*e*r*_*name的标签,提取文本内容,并通过超链接验证准确性。
- URL特征法:计算作者URL与其他URL的最长公共字符串长度,若公共长度与作者URL长度相差超过12位,则放弃结果;若相差小于12位,则根据公共部分修正结果。
- 噪声信息过滤法:按
\分隔<body>内的文本,去除前后空格和空行,根据规则过滤噪声信息,提取作者。
- 判断网页结构:
- 将
<body>内的文本按\分隔,找到发帖时间和主题帖作者的位置,根据两者距离判断论坛结构(作者与时间距离不超过4个词为上下结构,超过4个词为左右结构)。
- 提取正文:
- 上下结构:从时间第一次出现位置后的文本中提取,去除超链接和噪声信息,根据规则逐行排查,提取第一行正文作为模糊查找范围,进一步精确定位。
- 左右结构:定位正文所在的右栏父标签,提取正文方法与上下结构类似。
提取回帖
- 定位楼层:
- 提取所有时间,任取两个时间逐层向上寻找父节点,找到相同父节点则判定楼层层数和回帖数。
- 若未找到相同父节点,则判定楼层层数为2,回帖数为1。
- 若找到相同父节点,则判定回帖数大于1,楼层数大于2,并比较回复帖根节点标签的共性,寻找相似节点作为所有回复帖的根节点。
- 楼层数为2(回复数为1):
- 提取时间:从主题帖正文后的源代码中提取第一个时间。
- 提取作者:通过标签特征法查找,若未找到则通过URL特征提取法,若仍未找到则通过噪声过滤法。
- 提取正文:与主题帖提取正文方法类似。
- 楼层数为3以上:
- 提取时间:在各回复帖根节点中提取第一个时间。
- 提取作者:通过标签特征法查找,若未找到则通过噪声过滤法。
- 提取正文:应用主题帖正文提取方法,各自提取出正文片断,对比标签属性的公共部分作为正文标签特征,提取全部正文内容并尝试用其提取主题帖正文。
效果展示
对哇哈体育论坛、新浪论坛和天涯论坛进行爬虫测试,结果表明:
- 主题帖标题、论坛结构、发帖时间、主题帖作者、楼层数、回帖作者、回帖时间、回帖正文提取的正确率极高。
- 噪声词汇去除较准确。
- 给出了正文标签的共同特征。
研究结论
本文设计的通用论坛正文提取算法能够有效地从不同论坛中提取主题帖和回帖的关键信息,并去除噪声数据。通过分析论坛网页结构的共性规律,结合特征词库、噪声词库和正则表达式等技术,实现了对不同论坛的智能提取,具有较高的准确性和实用性。