よくMENTAのスクレイピング関係の質問を受け付けていると「BeautifulSoupで空白が入るクラス名の要素を抽出するにはどうすればいいですが」というものが頻繁に来るので、テンプレ用にメモしておきます
結論からいうとfind()で取得できることもあるのですが、たまにできないことがあるのでそういう場合はそのタグをcss selectorとしてselect()を使用することで解決できるパターンが多いです。
BeautifulSoupで空白が入るクラス名の要素を抽出する
今回は自分のこのブログのトップページにある「class=”entry-card-thumb card-thumb e-card-thumb”」というタグの部分を試しに抽出します
from bs4 import BeautifulSoup import requests res = requests.get('https://tkstock.site/') soup = BeautifulSoup(res.content) elems = soup.select('.entry-card-thumb.card-thumb.e-card-thumb') for elem in elems: print(elem)
<実行結果>
<figure class=”entry-card-thumb card-thumb e-card-thumb”> <img alt=”” class=”entry-card-thumb-image no-image list-no-image” height=”198″ src=”https://tkstock.site/wp-content/themes/cocoon-master/images/no-image-320.png” width=”320″/> <span class=”cat-label cat-label-52″>GAS(GoogleAppScript)</span> </figure> <figure class=”entry-card-thumb card-thumb e-card-thumb”>…
こんな感じで.select()を使えば空行のあるclass名の要素でもfind()と同じように取得することが可能です。これは参考書とかにはあまり載っていない小ネタですね。
これでも取得できていない場合はそもそも該当部分のHTML要素が取得できていない可能性があるので、元データになっているres.contetnやdriver.page_sourceをprintしてちゃんとほしい部分のHTMLタグが取得できているか確認しましょう。では~
コメント