新米エンジニアの失敗再発防止メモ

自分そしてこの世界の皆が、同じ失敗をしないためのメモ

Twitterやってます!@rakuton_t
欲しいものリストのブタメンを送ってくれた方、ありがとうございます!

【python】BeautifulSoupで特定のタグ内の文字列を取得するときは、tag.stringよりもtag.get_text()を使うべき

表題について

例えばこんな感じのソースコードがあるとする。

import urllib.request, urllib.error
from bs4 import BeautifulSoup

url ="適当なサイトのURL"

html = urllib.request.urlopen(url)
soup = BeautifulSoup(html, "html.parser")
tag = soup.select("div")[0]
print(type(tag.string))
print(type(tag.get_text()))

print(type(tag.string)) の方は、タグの内容によってはNoneTypeになる。
print(type(tag.get_text())) の場合は、必ず文字列型になる。

tag.stringではダメなパターン

<div>
テキスト
 <div>
 テキスト2
 </div>
</div>

タグがこのような内容になっていると、tag.stringはNoneTypeになる。
一方で、tag.get_text()の場合、

テキスト
テキスト2

のような結果になる。

タグの中身が文字がだけなら大丈夫だが、タグが含まれているとこのようになるようだ。

正直、これのせいで大分詰まった。ので記事にしました。

私の記事が役に立ったら、どうぞ何か買ってください!→ Amazon欲しいものリスト