<span>
I Like
<span class='unwanted'> to punch </span>
your face
</span>
「あなたの顔をパンチするのが好き」の代わりに「あなたの顔が好き」を印刷する方法
私はこれを試しました
lala = soup.find_all('span')
for p in lala:
if not p.find(class_='unwanted'):
print p.text
しかし、「TypeError:find()はキーワード引数を取りません」
テキストを取得する前に、extract()
を使用して不要なタグを削除できます。
しかし、すべてを保持します'\n'
とspaces
なので、削除するにはいくつかの作業が必要になります。
data = '''<span>
I Like
<span class='unwanted'> to punch </span>
your face
<span>'''
from bs4 import BeautifulSoup as BS
soup = BS(data, 'html.parser')
external_span = soup.find('span')
print("1 HTML:", external_span)
print("1 TEXT:", external_span.text.strip())
unwanted = external_span.find('span')
unwanted.extract()
print("2 HTML:", external_span)
print("2 TEXT:", external_span.text.strip())
結果
1 HTML: <span>
I Like
<span class="unwanted"> to punch </span>
your face
<span></span></span>
1 TEXT: I Like
to punch
your face
2 HTML: <span>
I Like
your face
<span></span></span>
2 TEXT: I Like
your face
外部スパン内のすべてのTag
オブジェクトをスキップして、NavigableString
オブジェクトのみを保持できます(HTMLのプレーンテキストです)。
data = '''<span>
I Like
<span class='unwanted'> to punch </span>
your face
<span>'''
from bs4 import BeautifulSoup as BS
import bs4
soup = BS(data, 'html.parser')
external_span = soup.find('span')
text = []
for x in external_span:
if isinstance(x, bs4.element.NavigableString):
text.append(x.strip())
print(" ".join(text))
結果
I Like your face
あなたは簡単にこのような(望まない)テキストを見つけることができます:
from bs4 import BeautifulSoup
text = """<span>
I Like
<span class='unwanted'> to punch </span>
your face
<span>"""
soup = BeautifulSoup(text, "lxml")
for i in soup.find_all("span"):
if 'class' in i.attrs:
if "unwanted" in i.attrs['class']:
print(i.text)
ここから他のすべてを出力することは簡単に行うことができます