我需要在运行时,在服务器端从随机网页中提取纯文本。我使用Google App Engine和Readability python端口。 其中有很多。
我使用Yuri的版本,因为它是最近的版本,似乎正在积极开发中。 我设法使用Python 2.7在Google App Engine上运行它。 现在“问题”是它返回HTML,而我需要纯文本。
this Stackoverflow article about links extraction中的建议是使用BeatifulSoup。如果没有其他选择,我会的。 BeatifulSoup将是另一种依赖,因为我使用基于lxml的版本。
我的问题:
答案 0 :(得分:4)
您可以使用html2text。这是一个漂亮的工具。
这是一个关于如何将它与python可读性工具一起使用的链接 - 它们一起被称为read2text。
http://brettterpstra.com/scripting-readability-markdownify-for-clipping-web-pages/
希望这会有所帮助:)
答案 1 :(得分:4)
不要让它流连忘返,我目前的解决方案
代码:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
text = soup.get_text()
答案 2 :(得分:2)
首先,提取具有可读性的HTML内容
html_snippet = Document(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标记且替换实体(“>
”应为“>
”等)的正则表达式,您可以查看https://stackoverflow.com/a/7778368/217895