【发布时间】:2010-07-28 09:22:05
【问题描述】:
我已经使用 urlopen 下载了一个页面。如何从中删除所有 html 标签?是否有任何正则表达式来替换所有 标签?
【问题讨论】:
标签: python
我已经使用 urlopen 下载了一个页面。如何从中删除所有 html 标签?是否有任何正则表达式来替换所有 标签?
【问题讨论】:
标签: python
我还可以推荐BeautifulSoup,这是一个易于使用的 html 解析器。在那里你会做类似的事情:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
all_text = ''.join(soup.findAll(text=True))
这样您就可以从 html 文档中获取所有文本。
【讨论】:
all_text = ''.join(soup.findAll(text=True)).encode('utf-8')
有一个很棒的 Python 库,名为 bleach。下面的这个调用将删除所有 html 标签,保留其他所有内容(但不会删除不可见的标签内的内容)。
bleach.clean(thestring, tags=[], attributes={}, styles=[], strip=True)
【讨论】:
>,它将被转义到>。不理想。
您可以使用html2text,它应该从 HTML 源(以编程方式使用 Python 或作为命令行工具)生成等效的可读文本。 因此,我可以从您的问题中推断出您的需求......
【讨论】:
有多种选项可以从数据中过滤掉 Html 标签。您可以使用 Python 内置的 w3lib 中的 Regex 或 remove_tags。
from w3lib.html import remove_tags
data_to_remove = '<p>hello\t\t, \tworld\n</p>'
print remove_tags(data_to_remove)`
输出:你好世界
注意:remove_tags 接受字符串对象。你可以通过 remove_tags(str(data_to_remove))
【讨论】:
试试这个:
import re
def remove_html_tags(data):
p = re.compile(r'<.*?>')
return p.sub('', data)
【讨论】:
一个非常简单的正则表达式是:
import re
notag = re.sub("<.*?>", " ", html)
这个解决方案的缺点是它不会删除 javascript 或 css,而只会删除标签。
【讨论】:
如果你需要 HTML 解析,Python 有a module 为你准备!
【讨论】: