从字符串中删除 HTML 标签的一种方法是使用 Beautiful Soup 库。调用 text() 函数会提取所有文本并删除所有标签。
BeautifulSoup 将仅解析和删除 HTML 标签,而不仅仅是删除以“<' and ending with a '>”开头的任何文本序列。它还会自动翻译 HTML 实体;例如
<
=> '<', >
=> '>' 等
from bs4 import BeautifulSoup
html = """<p>Lorem ipsum dolor sit amet, <strong>consectetur adipiscing
elit</strong></p>,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</br>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</br>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<a href="">Excepteur sint occaecat</a>
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>"""
soup = BeautifulSoup(html, "html.parser")
print(soup.text)
输出:
Lorem ipsum dolor sit amet, consectetur adipiscing
elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
你可以试试
import re
def remove_html_tags(text):
clean = re.compile('<.*?>')
return re.sub(clean, '', text)
有多种方法可以从 Python 中的字符串中删除 HTML 标签。
希望有帮助
最简单的方法是使用正则表达式删除标签。为此,您需要首先
import re
。然后你想删除<>里面的所有东西。为此,您可以使用 remover = re.compile('<.*?>')
完整的代码应该如下所示:
import re
string = '''<p>Lorem ipsum dolor sit amet, <strong>consectetur adipiscing
elit</strong></p>,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</br>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</br>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<a href="">Excepteur sint occaecat</a>
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>'''
remover = re.compile('<.*?>')
print(re.sub(remover, '', string))
另一种方法是使用
lxml
库,可以通过 pip install lxml
安装该库。 lxml 模块有一个内置函数,可以从 html 中删除所有标签。
代码看起来像这样:
from lxml import html
string = '''<p>Lorem ipsum dolor sit amet, <strong>consectetur adipiscing
elit</strong></p>,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</br>
<p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</br>
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
<a href="">Excepteur sint occaecat</a>
cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>'''
print(html.fromstring(string).text_content())
代码
html.fromstring(string).text_content()
是将 html 转换为文本,从而从中删除所有标签。
如果您想要单行删除标签而不需要
re
模块。例如在 Python 2.7 中使用 expr
。试试这个:
heading = 'hello<br>\n<br/>there'
' '.join([list(reversed(s.strip().split('>')))[0] for s in heading.split('<') if not s.strip().endswith('>')])
>>> 'hello there'