6

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

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

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

这篇关于链接提取的 Stackoverflow 文章中的建议是使用 BeatifulSoup。如果没有其他选择,我会的。BeatifulSoup 将是另一个依赖项,因为我使用基于 lxml 的版本。

我的问题:

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

3 回答 3

4

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

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

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

希望这可以帮助 :)

于 2012-06-22T06:21:35.237 回答
4

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

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

代码:

from bs4 import BeautifulSoup 
soup = BeautifulSoup(html) 
text =  soup.get_text() 
于 2012-06-28T06:17:39.630 回答
2

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

html_snippet = 文档(html).summary()

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

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

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 标签并进行实体替换的正则表达式(“ &gt;”应该是“ >”等等),您可以查看https://stackoverflow.com/a/7778368/217895

于 2016-06-04T18:13:15.697 回答