【Python】BeautifulSoupのfindで便利なlambdaの使い方

スポンサーリンク

BeautifulSoupのfind_allはスクレイピングしたものから抽出する時に使います。要素名とclassを指定する時は下のように書きます。

soup.find_all('要素名', class_ = 'Target')

とても便利ですが、これを実行するとclass名が’Target’に完全一致しているものしか抽出出来ません。

例えば、class名がTarget, Target1, Target2, …, Target10となるものが存在している時、上記のコードではclass名がTargetのものしか抽出出来ません。

こんな時、「class名が’Target’から始まるものを抽出したい!」って思いませんか?

今回はその方法を説明します。

目標

BeautifulSoupのfind_allでclass名が’Target’から始まるもの全てのリストを得る

結論

下記のコードを書くことで、class名が’Target~’となるもののリストを得ることが出来ます。

soup.find_all('要素名', class_ = lambda value: value and value.startswith('Target'))

startswithに関して

startswithは標準的に入っているメソッドで、

value.startswith('Target')

の形でvalueが’Target’から始まる場合にTrueを返し、そうでない場合にFalseを返します。

ちなみに、startswithに似ているメソッドでendswithとcontainsもあります。

value.endswith('Target')

はvalueが’Target’で終わる場合にTrueを返し、そうでない場合にFalseを返します。

value.contains('Target')

はvalueが’Target’を含む場合はTrueを返し、そうでない場合にFalseを返します。

まとめ

startswith, endswith, containsを使えばかなり抽出をしやすくなりそうです!

コメント

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