抓取网页新闻(自动化抽取新闻类网站正文的算法论文——《基于文本及符号密度的网页正文提取方法》 )
优采云 发布时间: 2021-11-26 18:20抓取网页新闻(自动化抽取新闻类网站正文的算法论文——《基于文本及符号密度的网页正文提取方法》
)
项目来源
这个项目的发展源于我在知网找到的一篇关于自动提取新闻网站文本的算法论文——《基于文本和符号密度的网页文本提取方法》
本文中描述的算法看起来简洁、清晰且合乎逻辑。但是因为论文只讲了算法的原理,并没有具体的语言实现,所以我按照论文用Python来实现这个提取器。我们还使用了今日头条、网易新闻、有民行空、观察者网、凤凰网、腾讯新闻、ReadHub、新浪新闻进行测试,发现提取效果非常好,几乎达到了100%的准确率。
项目状态
在论文描述的文本提取的基础上,我添加了标题、发表时间和作者的自动检测提取功能。
最终输出效果如下图所示:
目前,这个项目是一个非常非常早期的Demo。发布是希望我们能尽快得到大家的反馈,让我们的开发更有针对性。
本项目命名为extractor,而不是crawler,以避免不必要的风险。因此,本项目的输入是HTML,输出是字典。请使用适当的方法获取目标网站的HTML。
本项目目前没有,以后也不会提供主动请求网站 HTML的功能。
如何使用
项目代码中的GeneralNewsCrawler.py 提供了本项目的基本使用示例。
在Elements标签页找到标签,右键选择Copy-Copy OuterHTML,如下图
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。
已知问题 目前此项仅适用于新闻页面的信息提取。如果目标网站不是新闻页面,也不是今日头条中的专辑类型文章,提取结果可能达不到预期。可能有一些新闻页面提取结果中的作者为空字符串。这可能是由于 文章 没有作者或现有正则表达式未涵盖这一事实。Todo 沟通