web-dev-qa-db-ja.com

Python / BeautifulSoup-要素からすべてのタグを削除する方法は?

BeautifulSoupで見つけた要素からすべてのタグを単純に削除するにはどうすればよいですか?

55
Daniele B

BeautifulStoneSoupbs4、Python3ではさらにシンプルです

from bs4 import BeautifulSoup

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

なぜunwrapメソッドについて何も言及されていないのに、答えが見つからないのはなぜですか?または、さらに簡単に、get_text 方法

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

13
Bobby

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
SparkAndShine

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>
5
danblack

タグを取り除き、内容を保持したい場合、この質問に対する受け入れられた答えを参照してください: BeautifulSoupを使用してタグを削除しますが、その内容は保持します

2
Shaun

これが方法のようです!それと同じくらい簡単

この行では、現在の要素内のすべてのテキスト部分を結合しています

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