【Python】BeautifulSoupで条件を指定して要素を取得する


PythonのBeautifulSoupで条件を指定して要素を取得する方法について記します。



やりたいこと

特定のhtml要素(下記で言えばaタグ)をすべて取得するということはできているが、もう少し条件で絞り込みたい時。
例とし『href属性がある・かつ空ではないaタグのみ取得する』という事を次で行ってみます。

import requests
import bs4

response = requests.get("https://hoge.com")
soup = bs4.BeautifulSoup(response.content, "html.parser")
all_atags = soup.find_all("a")





条件を指定して要素を取得

上記では.find_allを使ってましたが、.selectで条件付きで絞り込むことができるようです。selectメソッドの引数のa[href]:not([href=””])にどこか見覚えはありませんでしょうか?そう!CSSセレクタです。CSSで書く時と同じようにセレクタを記述することで、取得する条件を絞り込むことができるようです。
ちなみに下の例では、『href属性がある・かつ空ではないaタグ』が取得されます。

import requests
import bs4

response = requests.get("https://hoge.com")
soup = bs4.BeautifulSoup(response.content, "html.parser")
all_atags = soup.select('a[href]:not([href=""])')





上記のセレクタは属性指定でしたが、もちろんクラス指定などもできます。下記は.menu-listクラスの中のliタグをすべて取得していますね。
jQueryのセレクタと同じ感覚で使えそうですね。

all_atags = soup.select('.menu-list li')






以上、【Python】BeautifulSoupで条件を指定して要素を取得する方法でした。

参考になれば幸いです。

コメント

タイトルとURLをコピーしました