使用 Python 删除字符串中的 HTML 标签的最佳方法是什么?

问题描述 投票:0回答:4
python html string replace
4个回答
3
投票

从字符串中删除 HTML 标签的一种方法是使用 Beautiful Soup 库。调用 text() 函数会提取所有文本并删除所有标签。

BeautifulSoup 将仅解析和删除 HTML 标签,而不仅仅是删除以“<' and ending with a '>”开头的任何文本序列。它还会自动翻译 HTML 实体;例如

&lt;
=> '<',
&gt;
=> '>' 等

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.

0
投票

你可以试试

import re

def remove_html_tags(text):
    clean = re.compile('<.*?>')
    return re.sub(clean, '', text)

有多种方法可以从 Python 中的字符串中删除 HTML 标签。

希望有帮助


0
投票

正则表达式

最简单的方法是使用正则表达式删除标签。为此,您需要首先

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

另一种方法是使用

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 转换为文本,从而从中删除所有标签。


0
投票

如果您想要单行删除标签而不需要

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'
© www.soinside.com 2019 - 2024. All rights reserved.