学習履歴

プログラミングなどの学習履歴

beautifulsoupでスクレイピングサンプルを作成

pythonスクレイピングライブラリの一つであるbeautifulsoupを使ってサンプルを作ってみました。

GitHubにあげています⇒

https://github.com/yyyuuuiii/myscraping

 

基本的にはお目当てのデータがのっているタグまで階層を降りていくというものですが、入れ子になっているタグのデータを抜き出す際には注意が必要でした。

beautifulsoup関連のサイトを見ていくと気づいたのがよくfindAllを使っていることに気づきました。でもこのfindやfindAllは使ってみると結構な曲者で、抜き出したいデータがある一番外側のタグのID名かクラス名を指定してfindAllで抜き取ると確かに一番外側のタグから内側までの情報が全て抜き出せます。

ただし欲しい情報がその内側のある個所だけだった場合、findAllを使ってから以下のようにすると上手く抽出できるだろうと思いきやエラーがでてしまいました。

 

yt_thumb_clip = soup.find_all("span", {"class": "yt-thumb-clip"})
srcb = yt_thumb_clip.img
print(srcb["src"])

 

しかしこれを以下のようにすると抽出できました。

for yt_thumb_clip in soup("span", {"class": "yt-thumb-clip"}):
srcb = yt_thumb_clip.img
print(srcb["src"])

基本的な書き方としてはfor文を使ってから、タグを指定していくのが失敗の少ない方法だと思います。
あとbeautifulsoupにしろ他のスクレイピングのライブラリはバージョンによってimport文が異なるのでどれが正しいimport文なのか見分けるのに少し躓きました。
pythonスクレイピングのライブラリのチュートリアルは日本語へ訳されたものが少ないので書き方を特定するまでに英語があまり得意ではない人にとっては少し時間がかかると思います。

ただbeautifulsoupの基本的な書き方はGitHubに載せているような形なのでご参考にんれれば幸いです。