【问题标题】:Is there a way to use readability and python to extract just text, not HTML?有没有办法使用可读性和 python 来提取文本,而不是 HTML?
【发布时间】:2012-06-24 10:41:48
【问题描述】:

我需要在运行时在服务器端从随机网页中提取纯文本。我使用 Google App Engine 和 Readability python 端口。 有很多。

  1. 早期version by gfxmonk,基于 BeautifulSoup
  2. version by minvolai 基于 gfxmonk 的除了使用 lxml 而不是 BeautifulSoap,使其(根据 minvolai,请参阅项目页面)更快,尽管引入了对 lxml 的依赖。
  3. version by Yuri Baburov aka buriy。与 minvolai 相同,取决​​于 lxml。还依赖chardet 来检测编码。

我使用 Yuri 的版本,因为它是最新的,并且似乎正在积极开发中。 我设法使用 Python 2.7 让它在 Google App Engine 上运行。 现在的“问题”是它返回 HTML,而我需要纯文本。

this Stackoverflow article about links extraction 中的建议是使用 BeatifulSoup。如果没有其他选择,我会的。 BeatifulSoup 将是另一个依赖项,因为我使用基于 lxml 的版本。

我的问题:

  • 有没有一种方法可以从我使用的 Python 可读性版本中获取纯文本,而无需分叉代码?
  • 有没有一种方法可以轻松地从 Python 可读性的 HTML 结果中检索纯文本,例如通过使用 lxml、BeatifulSoap、RegEx 或其他东西
  • 如果上面的答案是否定的,或者是但不容易,修改 Python 可读性的方法是什么。这种修改是否足以(对足够多的人)使这种扩展正式化?

【问题讨论】:

  • 你的意思是去掉html标签,只得到文本? stackoverflow.com/questions/753052/…
  • 最好有这样的工具。我认为有一个好的工具可以开发。希望你会开始努力。
  • 对,我的意思是只有文字。我想在第一段或第二段中对指向页面的链接进行注释,以便该人可以做出更明智的决定是否访问该链接。

标签: python readability text-extraction html-content-extraction


【解决方案1】:

首先,您提取具有可读性的 HTML 内容,

html_sn-p = 文档(html).summary()

然后,使用库来删除 HTML 标记。有一些警告: 1)您可能需要空格,“<p>some text<br>other text”不应该是“some textother text”,并且您可能需要将列表转换为“-”。 2)“#&39;”应该显示为“'”,“>”应该显示为“>”——这称为HTML实体替换(见下文)。

我通常使用一个叫做bleach的库来清除不必要的标签和属性:

cleaned_text = bleach.clean(html_snippet, tags=[])

cleaned_text = bleach.clean(html_snippet, tags=['i', 'b'])

如果您想删除所有标签并获得更好的文本格式,您需要使用任何类型的 html2text 库,或者您可以自己实现自定义格式程序。

但我想你现在明白了。

对于使用漂白剂的简单文本格式: 例如,如果您希望段落为“\n”,并将项目列为“\n -”,则:

norm_html = bleach.clean(html_snippet, tags=['p', 'br', 'li'])
replaced_html = norm_html.replace('<p>', '\n').replace('</p>', '\n')
replaced_html = replaced_html.replace('<br>', '\n').replace('<li>', '\n - ')
cleaned_text = bleach.clean(replaced_html, tags=[])

对于只去除 HTML 标签并进行实体替换的正则表达式(“&amp;gt;”应该是“&amp;gt;”等等),你可以看看https://stackoverflow.com/a/7778368/217895

【讨论】:

    【解决方案2】:

    不要让它流连忘返,我目前的解决方案

    1. 我没有找到使用可读性端口的方法。
    2. 我决定使用 Beautiful Soup,第 4 版
    3. BS 有一个简单的功能来提取文本

    代码:

    from bs4 import BeautifulSoup 
    soup = BeautifulSoup(html) 
    text =  soup.get_text() 
    

    【讨论】:

      【解决方案3】:

      您可以使用 html2text。这是一个漂亮的工具。

      这是一个关于如何将它与 python 可读性工具一起使用的链接——它们一起被称为 read2text。

      http://brettterpstra.com/scripting-readability-markdownify-for-clipping-web-pages/

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2011-06-03
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多