Python / BeautifulSoup-如何从元素中删除所有标签?


Answers:


108

凭借BeautifulStoneSoup极速bs4,它甚至在Python3简单

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)
text = soup.get_text()
print(text)

7
最好使用get_text()代替getText()
SparkAndShine

2
这是为什么?可能确实是这样,但了解原因会有所帮助。
Thomas Kimber

22
getText()是bs3语法,不符合pep8。它可能会被弃用。
丹尼尔·史密斯


12

使用get_text(),它以单个Unicode字符串的形式返回文档中或标签下的所有文本。

例如,从以下文本中删除所有不同的脚本标签:

<td><a href="http://www.irit.fr/SC">Signal et Communication</a>
<br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a>
</td>

预期结果是:

Signal et Communication
Ingénierie Réseaux et Télécommunications

这是源代码:

#!/usr/bin/env python3
from bs4 import BeautifulSoup

text = '''
<td><a href="http://www.irit.fr/SC">Signal et Communication</a>
<br/><a href="http://www.irit.fr/IRT">Ingénierie Réseaux et Télécommunications</a>
</td>
'''
soup = BeautifulSoup(text)

print(soup.get_text())

7

您可以在bs4中使用分解方法:

soup = bs4.BeautifulSoup('<body><a href="http://example.com/">I linked to <i>example.com</i></a></body>')

for a in soup.find('a').children:
    if isinstance(a,bs4.element.Tag):
        a.decompose()

print soup

Out: <html><body><a href="http://example.com/">I linked to </a></body></html>

1

看起来这就是方法!就如此容易

通过这一行,您将当前元素中的所有文本部分结合在一起

''.join(htmlelement.find(text=True))


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.