我想使用Python从HTML文件中提取文本。如果要从浏览器复制文本并将其粘贴到记事本中,我想要的输出基本上相同。

我想要比使用正则表达式更健壮的东西,因为正则表达式可能在格式不正确的HTML上失败。我见过很多人都推荐Beautiful Soup,但使用它时遇到了一些问题。例如,它拾取了不需要的文本,例如JavaScript源。此外,它没有解释HTML实体。例如,我希望'在HTML源代码中转换为文本中的撇号,就像我将浏览器内容粘贴到记事本中一样。

更新 html2text看起来很有希望。它正确处理HTML实体,并忽略JavaScript。但是,它不能完全生成纯文本;它产生markdown,然后必须将其转换为纯文本。它没有示例或文档,但是代码看起来很干净。


相关问题:

有帮助吗?

解决方案

html2text 是一个在此方面做得很好的Python程序。

其他提示

我发现的用于提取文本而不获取javascript或不需要的东西的最佳代码: 通用标签

您只需要在:之前安装BeautifulSoup: 通用标签

注意::NTLK不再支持clean_html功能

下面是原始答案,在评论部分中是替代方法。


使用 NLTK

我浪费了4-5个小时来解决html2text的问题。幸运的是我遇到了NLTK。
它神奇地工作。 通用标签

发现自己今天面临着同样的问题。我编写了一个非常简单的HTML解析器,以剥离所有标记的传入内容,并以最少的格式返回其余文本。 通用标签

这是xperroni答案的一个版本,它的含义更为完整。它会跳过脚本和样式部分,并转换charrefs(例如')和HTML实体(例如&)。

它还包括一个普通的纯文本到html逆转换器。 通用标签

您也可以在带状图库中使用html2text方法。 通用标签

要安装条形图,请运行sudo easy_install stripogram

我知道已经有很多答案了,但是部分找到了此处 通用标签

更新

根据Fraser的评论,这是更优雅的解决方案: 通用标签

有用于数据挖掘的模式库。

http://www.clips.ua.ac.be/pages/模式网

您甚至可以决定保留哪些标签: 通用标签

PyParsing做得很好。PyParsing Wiki被杀死,因此在另一个位置有使用PyParsing的示例(示例链接)。花费一些时间进行pyparsing的原因是,他还编写了一份非常简短且组织得很好的O'Reilly Short Cut手册,该手册也很便宜。

话虽如此,我经常使用BeautifulSoup,而且处理实体问题并不难,您可以在运行BeautifulSoup之前将其转换。

好运

这并非完全是Python解决方案,但是它将将Java生成的文本转换为文本,我认为这很重要(例如google.com)。浏览器链接(不是Lynx)具有Javascript引擎,并将使用-dump选项将源代码转换为文本。

因此您可以执行以下操作: 通用标签

签出htmllib而不是HTMLParser模块。它具有类似的界面,但可以为您完成更多工作。(它非常古老,因此在摆脱javascript和css方面没有太大帮助。您可以创建派生类,但是可以添加名称为start_script和end_style的方法(有关详细信息,请参见python文档),但这很难才能可靠地针对格式错误的html执行此操作。)无论如何,这是将纯文本打印到控制台的简单方法 通用标签

如果需要更高的速度和更低的准确性,则可以使用原始的lxml。 通用标签

使用安装 html2text

pip安装html2text

然后 通用标签

漂亮的汤不会转换html实体。考虑到HTML通常是越野车,并且充满了unicode和html编码问题,这可能是您最好的选择。这是我用来将html转换为原始文本的代码: 通用标签

我建议使用一个称为goose-extractor的Python包 鹅将尝试提取以下信息:

文章正文 文章的主要图片 文章中嵌入的所有Youtube / Vimeo电影 元描述 元标记

更多: https://pypi.python.org/pypi/goose-extractor/

另一个选择是通过基于文本的Web浏览器运行html并将其转储。例如(使用Lynx): 通用标签

这可以在python脚本中完成,如下所示: 通用标签

它不会完全为您提供HTML文件中的文本,但是取决于您的用例,它可能比html2text的输出更好。

另一个非python解决方案:Libre Office: 通用标签

与其他替代方案相比,我更喜欢这种方式的原因是,每个HTML段落都被转换为单个文本行(没有换行符),这正是我想要的。其他方法需要后处理。Lynx确实产生了不错的输出,但与我一直在寻找的输出不完全相同。此外,Libre Office可用于转换各种格式...

有人尝试过使用漂白剂进行bleach.clean(html,tags=[],strip=True)吗?它对我有用。

我知道这里已经有很多答案了,但是我认为 newspaper3k 也值得一提。我最近需要完成一个类似的任务,即从Web上的文章中提取文本,到目前为止,该库在我的测试中已经出色地实现了这一目标。它会忽略在菜单项和侧栏中找到的文本以及随OP请求显示在页面上的任何JavaScript。 通用标签

如果您已经下载了HTML文件,则可以执行以下操作: 通用标签

它甚至还具有一些NLP功能,可用于概括文章的主题: 通用标签

使用 Apache Tika ,我取得了不错的成绩。其目的是从内容中提取元数据和文本,因此可以对现成的解析器进行开箱即用的调整。

Tika可以作为服务器来运行,在Docker中运行/部署很简单容器,然后可以通过 Python绑定进行访问。

以一种简单的方式 通用标签

此代码查找以'<'开头并以'>'结尾的html_text的所有部分,并将所有找到的部分替换为空字符串

@PeYoTIL使用BeautifulSoup并消除样式和脚本内容的答案对我不起作用。我使用decompose而不是extract进行了尝试,但是它仍然无法正常工作。因此,我创建了自己的脚本,该脚本也使用<p>标签设置了文本格式,并用href链接替换了<a>标签。还可以处理文本内的链接。可以在此要点中嵌入测试文档。 通用标签

在Python 3.x中,您可以通过导入'imaplib'和'email'软件包以一种非常简单的方式进行操作。尽管这是一篇较旧的文章,但是也许我的回答可以帮助新来者。 通用标签

现在您可以打印主体变量,它将以纯文本格式:)如果对您来说足够好,那么最好将其选择为可接受的答案。

最适合我的是手稿。

https://github.com/weblyzard/inscriptis 通用标签

结果真的很好

您只能使用BeautifulSoup从HTML中提取文本 通用标签

虽然很多人提到使用正则表达式剥离html标签,但也有很多缺点。

例如: 通用标签

应解析为: 通用标签

这是我想出的一个片段,您可以根据自己的特定需求对其进行定制,它就像一个魅力 通用标签

这是我经常使用的代码。 通用标签

我希望能帮上忙。

由于该应用程序可以使用python宏,因此LibreOffice作者的注释很有用。它似乎为回答这个问题和扩大LibreOffice的宏基础都提供了很多好处。如果此解决方案是一次性的实现,而不是用作更大的生产程序的一部分,则在writer中打开HTML并将页面另存为文本似乎可以解决此处讨论的问题。

Perl方式(对不起,妈妈,我永远不会在生产中这样做)。 通用标签

我正在实现这样的目标。 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top