网页新闻抓取(自动化抽取新闻类网站正文的算法论文——《基于文本及符号密度的网页正文提取方法》 )

优采云 发布时间: 2021-11-30 20:18

  网页新闻抓取(自动化抽取新闻类网站正文的算法论文——《基于文本及符号密度的网页正文提取方法》

)

  项目来源

  这个项目的发展源于我在知网找到的一篇关于自动提取新闻网站文本的算法论文——《基于文本和符号密度的网页文本提取方法》)

  本文中描述的算法看起来简洁、清晰且合乎逻辑。但是因为论文只讲了算法的原理,并没有具体的语言实现,所以我按照论文用Python来实现这个提取器。我们还使用了今日头条、网易新闻、有民行空、观察者网、凤凰网、腾讯新闻、ReadHub、新浪新闻进行测试,发现提取效果非常好,几乎达到了100%的准确率。

  项目状态

  项目源码托管在Github上:

  在论文描述的文本提取的基础上,我添加了标题、发表时间和作者的自动检测提取功能。

  最终输出效果如下图所示:

  

  目前,这个项目是一个非常非常早期的Demo。发布是希望我们能尽快得到大家的反馈,让我们的开发更有针对性。

  本项目命名为extractor,而不是crawler,以避免不必要的风险。因此,本项目的输入是HTML,输出是字典。请使用适当的方法获取目标网站的HTML。

  本项目目前没有,以后也不会提供主动请求网站 HTML的功能。

  环境使用方法

  如果您想体验 GNE 的功能,请按照以下步骤操作:

  安装 GNE

  # 以下两种方案任选一种即可

# 使用 pip 安装

pip install --upgrade git+https://github.com/kingname/GeneralNewsExtractor.git

# 使用 pipenv 安装

pipenv install git+https://github.com/kingname/GeneralNewsExtractor.git#egg=gne

  使用 GNE

  >>> from gne import GeneralNewsExtractor

>>> html = '''经过渲染的网页 HTML 代码'''

>>> extractor = GeneralNewsExtractor()

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

>>> print(result)

{"title": "xxxx", "publish_time": "2019-09-10 11:12:13", "author": "yyy", "content": "zzzz"}

  开发环境

  如果您需要参与本项目的开发,请按照以下步骤操作。

  本项目使用 Pipenv 来管理 Python 的第三方库。如果你不知道Pipenv是什么,请点我跳转。

  安装 Pipenv 后,请按照以下步骤运行代码:

  git clone https://github.com/kingname/GeneralNewsExtractor.git

cd GeneralNewsExtractor

pipenv install

pipenv shell

python3 example.py

  特别说明

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

  

  在Elements标签页找到标签,右键选择Copy-Copy OuterHTML,如下图

  

  from gne import GeneralNewsExtractor

extractor = GeneralNewsExtractor()

html = '你的目标网页正文'

result = extractor.extract(html)

print(result)

  from gne import GeneralNewsExtractor

extractor = GeneralNewsExtractor()

html = '你的目标网页正文'

result = extractor.extract(html, title_xpath='//h5/text()')

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。

  运行截图

  

  网易新闻

  

  今日头条

  

  新浪新闻

  

  观察者网

  

  项目文件

  GNE 常见问题问答

  已知问题 目前此项仅适用于新闻页面的信息提取。如果目标网站不是新闻页面,也不是今日头条中的专辑类型文章,提取结果可能达不到预期。可能有一些新闻页面提取结果中的作者为空字符串。这可能是由于 文章 没有作者或现有正则表达式未涵盖这一事实。Todo 沟通

  如果觉得GNE对你的日常发展或公司有帮助,请加作者微信mxqiuchen(或扫描下方二维码)并注明“GNE”,作者会拉你进群。

  

  验证消息:GNE

  论文修改

  在使用Python实现这个提取器的过程中,发现论文中的公式和方法存在一些缺陷,会导致部分节点报错。我会单独写几篇文章文章来介绍这里的变化。请关注我的微信公众号:闻所未闻的代码:

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线