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

Dan*_*e B 59 python beautifulsoup

如何从BeautifulSoup中找到的元素中删除所有标签?

sha*_*wnl 80

随着BeautifulStoneSoup进入bs4,它在Python3中更简单

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)
text = soup.get_text()
print(text)
Run Code Online (Sandbox Code Playgroud)

  • getText()是bs3语法,而不是pep8兼容.它可能会被弃用. (13认同)
  • 最好使用`get_text()`而不是`getText()`. (4认同)
  • 这是为什么?情况可能确实如此,但了解原因会有所帮助。 (4认同)

Bob*_*bby 13

为什么没有我已经看过的答案提到过这个unwrap方法?或者,更简单的get_text方法

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#unwrap http://www.crummy.com/software/BeautifulSoup/bs4/doc/#get-text


Spa*_*ine 9

使用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>
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

Signal et Communication
Ingénierie Réseaux et Télécommunications
Run Code Online (Sandbox Code Playgroud)

这是源代码:

#!/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())
Run Code Online (Sandbox Code Playgroud)


小智 6

简单地以文本而不是 html 形式获取内容的代码:

html_text参数是您将传递到此函数中以获取文本的字符串

from bs4 import BeautifulSoup
    
soup = BeautifulSoup(html_text, 'lxml')
text = soup.get_text()
print(text)
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以在bs4中使用decompose方法:

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>
Run Code Online (Sandbox Code Playgroud)


Dan*_*e B 1

看起来就是这样做的!就如此容易

通过这一行,您可以将当前元素中的所有文本部分连接在一起

''.join(htmlelement.find(text=True))
Run Code Online (Sandbox Code Playgroud)