新闻类网页正文通用抽取器(一)——项目介绍

简介: 新闻类网页正文通用抽取器(一)——项目介绍

摄影:产品经理厨师:kingname

项目起源

开发这个项目,源自于我在知网发现了一篇关于自动化抽取新闻类网站正文的算法论文——《基于文本及符号密度的网页正文提取方法》

这篇论文中描述的算法看起来简洁清晰,并且符合逻辑。但由于论文中只讲了算法原理,并没有具体的语言实现,所以我使用 Python 根据论文实现了这个抽取器。并分别使用今日头条、网易新闻、游民星空、观察者网、凤凰网、腾讯新闻、ReadHub、新浪新闻做了测试,发现提取效果非常出色,几乎能够达到100%的准确率。

项目现状

在论文中描述的正文提取基础上,我增加了标题、发布时间和文章作者的自动化探测与提取功能。

最后的输出效果如下图所示:

目前这个项目是一个非常非常早期的 Demo,发布出来是希望能够尽快得到大家的使用反馈,从而能够更好地有针对性地进行开发。

本项目取名为抽取器,而不是爬虫,是为了规避不必要的风险,因此,本项目的输入是 HTML,输出是一个字典。请自行使用恰当的方法获取目标网站的 HTML。

本项目现在不会,将来也不会提供主动请求网站 HTML 的功能。

如何使用

项目代码中的GeneralNewsCrawler.py提供了本项目的基本使用示例。

  • 本项目的测试代码在test文件夹中
  • 本项目的输入 HTML 为经过 JavaScript 渲染以后的 HTML,而不是普通的网页源代码。所以无论是后端渲染、Ajax 异步加载都适用于本项目。
  • 如果你要手动测试新的目标网站或者目标新闻,那么你可以在 Chrome 浏览器中打开对应页面,然后开启开发者工具,如下图所示:

  • Elements标签页定位到<html>标签,并右键,选择Copy-Copy OuterHTML,如下图所示

  • 当然,你可以使用 Puppeteer/Pyppeteer、Selenium 或者其他任何方式获取目标页面的JavaScript渲染后的源代码。
  • 获取到源代码以后,通过如下代码提取信息:
from GeneralNewsCrawler import GeneralNewsExtractor
extractor = GeneralNewsExtractor()
html = '你的目标网页正文'
result = extractor.extract(html)
print(result)

对大多数新闻页面而言,以上的写法就能够解决问题了。

但某些新闻网页下面会有评论,评论里面可能存在长篇大论,它们会看起来比真正的新闻正文更像是正文,因此extractor.extract()方法还有一个默认参数noise_mode_list,用于在网页预处理时提前把评论区域整个移除。

noise_mode_list的值是一个列表,列表里面的每一个元素都是 XPath,对应了你需要提前移除的,可能会导致干扰的目标标签。

例如,观察者网下面的评论区域对应的Xpath 为//div[@class="comment-list"]。所以在提取观察者网时,为了防止评论干扰,就可以加上这个参数:

result = extractor.extract(html, noise_node_list=['//div[@class="comment-list"]'])

test文件夹中的网页的提取结果,请查看result.txt

已知问题

  1. 目前本项目只适用于新闻页的信息提取。如果目标网站不是新闻页,或者是今日头条中的相册型文章,那么抽取结果可能不符合预期。
  2. 可能会有一些新闻页面出现抽取结果中的作者为空字符串的情况,这可能是由于文章本身没有作者,或者使用了已有正则表达式没有覆盖到的情况。

Todo

  • 使用一个配置文件来存放常量数据,而不是直接 Hard Code 写在代码中。
  • 允许自定义时间、作者的提取Pattern
  • 优化内容提取速度
  • 测试更多新闻网站
  • ……

论文修订

在使用 Python 实现这个抽取器的过程中,我发现论文里面的公式和方法存在一些纰漏,会导致部分节点报错。我将会单独写几篇文章来介绍这里的修改。


目录
相关文章
|
安全 数据安全/隐私保护
什么是受 DRM 保护的内容以及如何删除 DRM 保护
当涉及到数字媒体世界中的内容时,您当然需要借助 DRM(数字版权管理)技术来确保您的创作或内容的安全和保护。让我们简要了解一下什么是受 DRM 保护的内容以及如何删除 DRM 保护。
|
存储 SQL 分布式计算
数据湖 VS 数据仓库之争?阿里提出大数据架构新概念:湖仓一体
随着近几年数据湖概念的兴起,业界对于数据仓库和数据湖的对比甚至争论就一直不断。有人说数据湖是下一代大数据平台,各大云厂商也在纷纷的提出自己的数据湖解决方案,一些云数仓产品也增加了和数据湖联动的特性。但是数据仓库和数据湖的区别到底是什么,是技术路线之争?是数据管理方式之争?二者是水火不容还是其实可以和谐共存,甚至互为补充?本文作者来自阿里巴巴计算平台部门,深度参与阿里巴巴大数据/数据中台领域建设,将从历史的角度对数据湖和数据仓库的来龙去脉进行深入剖析,来阐述两者融合演进的新方向——湖仓一体,并就基于阿里云MaxCompute/EMR DataLake的湖仓一体方案做一介绍。
28626 2
数据湖 VS 数据仓库之争?阿里提出大数据架构新概念:湖仓一体
|
Kubernetes 网络协议 关系型数据库
Kubernetes----ExternalName类型的Service
Kubernetes----ExternalName类型的Service
2667 0
|
自然语言处理 算法 机器人
PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
PaddleNLP通用信息抽取技术UIE【一】产业应用实例:信息抽取{实体关系抽取、中文分词、精准实体标。情感分析等}、文本纠错、问答系统、闲聊机器人、定制训练
|
6月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。
|
9月前
|
存储 Serverless API
通过图片视觉理解,结构化提取属性信息测评报告
本文详细评测了阿里云的图片信息提取解决方案,涵盖部署、功能测试、性能表现及安全性考量等方面。该方案结合函数计算、对象存储与百炼模型服务,提供高效、准确的图像处理能力,适合快速搭建图像处理应用。
426 12
|
编解码 C++ 索引
BackTrader 中文文档(九)(3)
BackTrader 中文文档(九)
405 0
|
人工智能 监控 数据可视化
如何利用 DataV 的 AI 功能进行数据可视化?
如何利用 DataV 的 AI 功能进行数据可视化?
628 1
|
网络协议 Linux
在Linux中,如何分析网络连接和端口占用情况?
在Linux中,如何分析网络连接和端口占用情况?
|
存储 安全 Java
Java中使用加密盐
摘要(Markdown格式): 本文介绍了密码安全性中的加盐(Salt)技术,以对抗彩虹表攻击。彩虹表是预先计算的哈希值集合,能威胁到仅使用MD5等简单哈希的密码。加盐是在密码中加入随机字符串,提高破解难度。文章展示了Java代码示例,说明如何生成和验证加盐后的密码。使用Spring Security的BCryptPasswordEncoder也作为例子给出,它提供了内置的加盐和加密功能。即使密码相同,每次加盐后生成的密文都不同,增强了密码的安全性。
574 1
Java中使用加密盐