Python / BeautifulSoup - wie entferne ich alle Tags aus einem Element?

75

Wie kann ich einfach alle Tags von einem Element entfernen, das ich in BeautifulSoup finde?

Daniele B.
quelle

Antworten:

102

Mit BeautifulStoneSoupgone in bs4, es ist noch einfacher in Python3

from bs4 import BeautifulSoup

soup = BeautifulSoup(html)
text = soup.get_text()
print(text)
shawnl
quelle
6
Es ist besser zu verwenden get_text()als getText().
SparkAndShine
2
Warum das? Es mag durchaus der Fall sein, aber es wäre hilfreich zu verstehen, warum.
Thomas Kimber
21
getText () ist bs3-Syntax und nicht pep8-kompatibel. Es wird wahrscheinlich veraltet sein.
Daniel Smith
11

Verwenden Sie get_text () , um den gesamten Text in einem Dokument oder unter einem Tag als einzelne Unicode-Zeichenfolge zurückzugeben.

Entfernen Sie beispielsweise alle verschiedenen Skript-Tags aus dem folgenden 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>

Das erwartete Ergebnis ist:

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

Hier ist der Quellcode:

#!/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())
SparkAndShine
quelle
7

Sie können die Zerlegungsmethode in bs4 verwenden:

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>
Danblack
quelle
1

es sieht so aus, als wäre das der richtige Weg! so einfach ist das

Mit dieser Zeile verbinden Sie alle Textteile innerhalb des aktuellen Elements

''.join(htmlelement.find(text=True))
Daniele B.
quelle
0

Hier ist der Quellcode: Sie können den Text erhalten, der genau in der URL enthalten ist

URL = ''
page = requests.get(URL)
soup = bs4.BeautifulSoup(page.content,'html.parser').get_text()
print(soup)
Chaitanya Mallepudi
quelle
0

Code, um den Inhalt einfach als Text anstelle von HTML abzurufen:

Der Parameter 'html_text' ist die Zeichenfolge, die Sie in dieser Funktion übergeben, um den Text abzurufen

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_text, 'lxml')
text = soup.get_text()
print(text)
Shaurya Sheth
quelle
Hinzugefügt, überprüfen Sie es einfach.
Shaurya Sheth