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を使えばかなり抽出をしやすくなりそうです!
コメント