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で条件を指定して要素を取得する方法でした。
参考になれば幸いです。
コメント