当前位置: 首页 > 后端技术 > Python

新闻网页通用文本提取器

时间:2023-03-26 19:07:25 Python

项目的由来这个项目的发展源于我在知网上找到了一篇关于如何从新闻网站自动提取文本的算法论文——参见这篇论文中描述的算法《基于文本及符号密度的网页正文提取方法》简洁明了,逻辑性强。但是由于论文只讲了算法原理,并没有具体的语言实现,所以我按照论文用Python实现了提取器。并使用今日头条、网易新闻、游民星空、观察者网、凤凰网、腾讯新闻、阅览室、新浪新闻进行测试,发现提取效果非常好,几乎达到了100%的准确率。项目情况在论文描述的文本提取的基础上,我增加了标题、发布时间、文章作者的自动检测和提取功能。最终输出效果如下图所示:本项目目前是非常非常早的Demo,发布是希望尽快得到大家的反馈,以便更好的针对性开发。本项目命名为extractor,不命名为crawler,避免不必要的风险。因此,本项目的输入是HTML,输出是字典。您可以使用适当的方法来获取目标站点的HTML。该项目目前不提供也不会为站点提供未经请求的HTML的能力。项目代码中如何使用GeneralNewsCrawler.py提供了本项目的基本使用示例。本项目的测试代码在test文件夹下。本项目的输入HTML是JavaScript渲染出来的HTML,不是普通的网页源代码。所以后端渲染和Ajax异步加载都适用于本项目。如果想手动测试新的目标网站或目标新闻,可以在Chrome浏览器中打开相应的页面,然后打开开发者工具,如下图所示:在Elements标签页中找到标签,然后右击,选择Copy-CopyOuterHTML,如下图当然,你可以使用Puppeteer/Pyppeteer、Selenium或者其他任何方式获取目标页面的JavaScript渲染源代码。获取到源码后,通过以下代码提取信息:fromGeneralNewsCrawlerimportGeneralNewsExtractorextractor=GeneralNewsExtractor()html='你的目标网页文本'result=extractor.extract(html)print(result)对于大部分新闻页面,上面的写法方法可以解决问题。但是有些新闻网页下面会有评论,评论中可能会有冗长的文章,看起来更像文字而不是真正的新闻文字,所以extractor.extract()方法还有一个默认参数noise_mode_list,用于网页预处理提前移除整个评论区。noise_mode_list的值是一个列表,列表中的每个元素都是一个XPath,对应你需要提前去除的、可能造成干扰的目标标签。比如Observer.com下的评论区对应的Xpath是//div[@class="comment-list"]。所以在提取Observer.com的时候,为了防止评论干扰,可以加上这个参数:result=extractor.extract(html,noise_node_list=['//div[@class="comment-list"]'])testfile文件夹内网页的提取结果请查看result.txt。已知问题目前该项目仅适用于新闻页面的信息抽取。如果目标网站不是新闻页面,也不是今日头条的相册类文章,提取结果可能达不到预期。可能有一些新闻页面,提取结果中的作者是空串。这可能是因为文章本身没有作者,或者使用现有的正则表达式没有涵盖的情况。Todo使用配置文件来存储常量数据,而不是直接在代码中编写HardCode。允许自定义时间、作者提取模式自动识别新闻列表页面优化内容提取速度测试更多新闻网站...交流项目地址:https://github.com/kingname/G...如果您觉得GNE适合您如果对你的日常发展或公司有帮助,请加作者微信mxqiuchen(或扫描下方二维码)并注明“GNE”,作者会拉你入群。验证信息:GNE