●動画で使用したプログラムはこちら
https://colab.research.google.com/drive/13z_7vstwoqcmNVNOV0con4aXnlhILm9T?usp=sharing
●もくじ
0:46 スクレイピングの注意事項
1:00 Googleコラボレイトリーの説明
1:21 ライブラリをimport
2:16 Seleniumの設定
3:36 Google画像検索のURLを準備
4:05 BeautifulSoupの準備
4:44 Seleniumを使ってすべての要素が読み込まれるまで待つという設定
4:58 HTMLから橋本環奈の画像が入ったイメージタグを取得
7:41 Google Driveに画像を保存
9:49 発展課題
●発展課題
・「橋本環奈」以外の検索ワードでも試してみましょう
・「橋本環奈 かわいい」で検索したらダウンロード済みの画像があったとします。
それらの画像をダウンロードしないようにするにはどうしたらいいでしょうか
・今回スクレイピングした画像は画質が悪く大きさも小さいです
高画質の画像をGoogle画像検索からスクレイピングする方法も考えてみてください
・Google画像検索はスクロールするたびに新しい画像が読み込まれます
スクロールして新しく読み込まれた画像もスクレイピングするにはどうしたらいいでしょうか
●公式LINEアカウント
質問・企画リクエストを受け付けています。動画の中のプログラムについての質問もOKです!
https://lin.ee/aqGoTvy
●「Webサービス開発入門」の動画はこちら
●「ゲーム開発入門」の動画はこちら
●「作業効率化」の動画はこちら
●テキストから自動音声を作る方法(直也テックの音声はこれで作成)
●Twitter
Tweets by naoyashiga
●経歴
2014.3 同志社大学理工学部情報システムデザイン学科卒業
2014.4 – 2017.2 ヤフー株式会社 フロントエンドエンジニア、iOSアプリエンジニア
2017.2- 株式会社わたしは クリエイティブ開発
現在は大喜利人工知能を開発する”株式会社わたしは”にてクリエイティブ開発者として勤務。
●個人事務所
こんにちは。エンジニアの直也です。
今日は「橋本環奈さんの画像をGoogle画像検索からスクレイピングする方法」について解説します。
こちらはGoogleで橋本環奈さんの画像を検索した結果です。
ここに表示された画像を100枚ほどダウンロードしGoogle Driveに保存することをやります。
プログラミング言語のPythonを使ってプログラムを書いていきます。
今日紹介するプログラムはGoogleコラボレイトリーを使っています
これはPythonをオンラインで実行できる環境です
環境自体も簡単に共有することができます
概要欄にプログラムのURLを掲載しております
ぜひ学習の参考にしてください
最初にスクレイピングについての注意事項を話します
過度にアクセスを行うスクレイピングはサーバに負担をかけるのでやめましょう
節度を守ったスクレイピングを心がけてください
こちらがGoogleコラボレイトリーの画面です
まず画面上部を非表示にします
Googleコラボレイトリーではこちらのセルと呼ばれる場所にプログラムを書きます
実行する場合はセルの左の三角ボタンを押してください
するとセルのないのプログラムだけが実行されます
最初にrequestsとBeautifulSoupという2つのライブラリを読み込みます
requestsはHTTPリクエストに関するプログラムを簡単に書けるライブラリです
ライブラリは便利なプログラムの部品をひとまとめにしたファイルのことです
PythonではHTTPリクエスト周りの処理をライブラリなしで書こうとすると処理が煩雑になります
なのでライブラリを使います
今回のプログラムでは主にダウンロード(GETリクエスト)するときに使います。
例えば画像をダウンロードするという処理です
BeautifulSoupはスクレイピングを簡単にできるライブラリです。
今回のプログラムでは主に指定したHTMLタグの情報をピンポイントで取得することに使います
importを使ってライブラリを読み込みます
読み込めました
Google画像検索をスクレイピングするときに注意点があります
BeautifulSoupだけを使ってHTMLを読み込もうとすると画像が準備されていない状態のHTMLが読み込まれます
これは画像の読み込みを待たずにHTMLを取得してしまっているからです
すべての要素を読み込んでからHTMLを取得するためにはBeautifulSoupだけだとやりづらいです
今回はSeleniumも使います
Seleniumはブラウザの操作を自動化できるツールです
Seleniumは要素を読み終えてからのHTMLを取得することもできます
今回はその機能を使います
こちらがSeleniumを準備するための処理です
コマンドは覚える必要はないです。コピペでOKです。
こちらはWebブラウザをUIなしで扱うための設定です
こちらも覚える必要はないです。コピペでOKです。
ブラウザ操作を自動化する際は実は目に見える画面を用意する必要がありません
UIはあくまで人間のためのものであり、コンピュータはUIなしでも処理が可能だからです
準備に1分くらいかかります
次にGoogle画像検索のURLを準備します
こちらのページはこのURLで見れます
このURLはqの後に検索ワードが入っていることがわかります
これと同じものを作ります
ちなみに検索ワードのことを「クエリ(query)」と言います
URLの一部にクエリを埋め込むと検索URLを生成することができます
次にSeleniumを使ってすべての要素が読み込まれるまで待つという設定を行います
こちらのコードは覚える必要はないです。コピペでOKです。
BeautifulSoupを使ってHTMLを解析します
まずSelenium経由でHTMLを取得します
そうすることでページ上のすべての画像が読み込まれた状態のHTMLを取得することができます
取得したら文字コードの設定を行います
終わったらBeautifulSoupに結果を渡します
ちゃんとHTMLガ読み込まれているか確認します
大量のHTMLが読み込まれたらOKです
やけに少ない場合はうまくいっていない可能性があります
次にHTMLから橋本環奈の画像が入ったイメージタグを取得します
Chromeのデベロッパーツールを使うとHTMLの構造を解析することができます
橋本環奈の画像を選択するとimgタグがハイライトされます
橋本環奈の画像のURLがimgタグに入っていることがわかります
この画像のURLさえ手に入ればあとはダウンロードするだけです
BeautifulSoupを使ってHTMLを解析して特定のタグ情報を取得します
find_all関数を使えば指定したタグに該当する要素をリストで返します
実行してみると大量のタグ情報が入ったリストが返ってきました
試しにURLを開いてみると橋本環奈の画像であることが確認できます
imgタグのリストを変数に代入します
取得したimgタグの数を出力します
画像情報には今回のスクレイピングの場合、二種類あります
まず普通の画像
これはdata-src属性にurlが入っています。それを抜き出します。
次にBase64
Base64は画像をテキストに変換した形式のことをさします
一般的に画像よりもテキストの方が容量が小さく、素早く読み込める利点があります。
Google画像検索では先頭の20個の画像がbase64形式のようです
base64なので高速に読み込むことができるんです。
テキストから画像に戻すことができます
それをデコードといいます
デコードの処理は後述のsave_base64_image関数で行います
urlとbase64の情報を取得していきます
まず先ほどのイメージタグ情報のリストをforループで回します
get関数を使えば属性情報を取得できます
src属性を取得します
これでbase64の情報だけ取得できました
しかし普通の画像はNoneになります
なのでNoneの場合はdata-src属性も取得することにします
これで普通の画像のURLも取得できました
画像をダウンロードする関数を追加します
こちらのコードは覚える必要はないです。コピペでOKです。
Base64をデコードして画像に戻す関数も追加します
こちらのコードも覚える必要はないです。コピペでOKです。
最後にGoogle Driveに画像を保存します
まずGoogleコラボレイトリーの左のメニューから
Google Driveをマウントします
マウントすると左のメニューにGoogle Driveのディレクトリが追加されます
次にあらかじめGoogle Driveで作成しておいたフォルダを見つけます
そしてパスをコピーします
念のためディレクトリがない場合は新規作成するコードを追加しておきます
enumerateを使えばリストのindexを取得できます
このindexをそのままファイル名にします
formatを使えば文字列内の指定した場所に変数の内容を入れることができます
os.path.joinを使えば引数に指定した文字列をパスの形に繋げることができます
base64の先頭の部分は接頭辞なので必要がありません
接頭辞以降の文字列が画像情報になります
なので接頭辞を削除します
reをimportすれば正規表現を使うことができます
findall関数を使って指定した文字列を変数urlから見つけます
一件でもあればbase64だと判断します
そしてreplace関数を使って接頭辞を削除します
最後にダウンロードの関数を実行して画像を保存します
実行できました
Google Driveを確認します
橋本環奈の画像がたくさんダウンロードできていました
base64の変換もうまくいっているようです
余力のある人は発展課題にも挑戦してみてください
「橋本環奈」以外の検索ワードでも試してみましょう
「橋本環奈 かわいい」で検索したらダウンロード済みの画像があったとします。
それらの画像をダウンロードしないようにするにはどうしたらいいでしょうか
今回スクレイピングした画像は画質が悪く大きさも小さいです
高画質の画像をGoogle画像検索からスクレイピングする方法も考えてみてください
Google画像検索はスクロールするたびに新しい画像が読み込まれます
スクロールして新しく読み込まれた画像もスクレイピングするにはどうしたらいいでしょうか
今回の動画がおもしろい、ためになったという方は高評価、チャンネル登録をお願い致します
またコメントで質問も募集しています
気軽にコメントしてもらえたら嬉しいです
では次の動画でお会いしましょう
#プログラミング #橋本環奈 #Python
8 comments
●もくじ
0:46 スクレイピングの注意事項
1:00 Googleコラボレイトリーの説明
1:21 ライブラリをimport
2:16 Seleniumの設定
3:36 Google画像検索のURLを準備
4:05 BeautifulSoupの準備
4:44 Seleniumを使ってすべての要素が読み込まれるまで待つという設定
4:58 HTMLから橋本環奈の画像が入ったイメージタグを取得
7:41 Google Driveに画像を保存
9:49 発展課題
08:20
for index, url in enumerate(img_urls):
の部分にエラーが出ているのですが、
NameError: name 'img_urls' is not defined と出ているのですがスペルミスは
ありませんでした、何が問題なのでしょうか??
細かすぎず、ざっくりで、「コピペでOK!」っていう気軽にやってみようという気にさせてもらえる解説が良いですね。
すいませんが、このエラーの直し方をご教授いただけないでしょうか。
—————————————————————————
InvalidSchema Traceback (most recent call last)
<ipython-input-29-d50005a88024> in <module>()
28 save_base64_image(data=url, file_path=image_path)
29 else:
—> 30 download_image(url=url, file_path=image_path)
5 frames
/usr/local/lib/python3.6/dist-packages/requests/sessions.py in get_adapter(self, url)
726
727 # Nothing matches :-/
–> 728 raise InvalidSchema("No connection adapters were found for {!r}".format(url))
729
730 def close(self):
InvalidSchema: No connection adapters were found for 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAMAAABHPGVmAAAAbFBMVEX///8AAAD5+fnKysosLCzFxcXk5OT8/PxGRkb19fXT09Pt7e3p6enW1tbZ2dnQ0NCurq60tLS+vr4kJCShoaGIiIiSkpKYmJhycnKnp6c+Pj57e3tsbGw4ODiBgYFOTk4YGBhZWVkNDQ1kZGSLR0Z3AAAQIklEQVRoge1a2dqzKJdlEBRBEJyNQ4z3f4+9N5rB5K36uw/66ZOm3kryGWWx57UhhMAQ93yRdwpDqQTfaCCkuJHX6HZ8neCLhhAd78BPx7jlrk7hfZDE7OVxzdvjPeOvOcRMCtLjk36PE0w4sX2DVAW+1pRWmpD0AFnIf2N8gIQRXhw+uZdxAkUIa963yu1YHqVthIz3vAT14i3Tv4CAukiqVnw0r87nnXjf2vnjNvqwTCkyRpD++S3vlGPwbsI2S4VXbNfsU/oNMqacmw6eXB2axqmUlOoNsrH45uhqjZTHauh+ftnuq/codlqumq1x1tJu3Y+6Vq+dl/TRObT7rq11jXyh2OFYsaWHRFkEyV66BC9Z8VMdSCPcsZ7sR11h9MEIIvLm6VpR+ucNh3UYS5NDouiH9HF+60eZl2g0PhJzXpRr6PW3uiobuDIbPnuPHvQ5ZDg/qEMifYDQAzFN9qHbKbifsE1JE3w4gOcN/TdIQnKeRh8GEFhVam36+rY731lblx4e4v0DPXiT5/Va+sHEycLUWLjK3ub8BMmIlfIRQUZakq52xVCftxZnvMhGpySVHRuiUrUP5D+Pi3dpWOehhJaWZdSXro8vT+Wl8Z9Sk7LDgH0w1X1NCPKr42YUd/hDEkLmA4TT4+GQG/85g8GFmySRdk8Os39EKznsE7Ixir84ZbKYar5AjlAHq69xNYFSWb6WiNMYeLGwiMO57hAgT9WHpT/WrZyJ773qpmr4BVGHRSg1e3y2ow/5/v6FVnpS0PkGiwEQ81yCrT8VS1hviFr+UNdyYlA2RNHNVr4eIsOn3mY6gNgJKfipTnNr2x694zQiUSsXt+0nrWSS9ieIZC89Px8iOFt6hDJqjMHLTAL5zsNuXDY0FKv07qvKfIGsq3QnCCdPVddXSYoS4fmwr0WQtEqJ7CW5Dla4+HBQrlOMfYHQQbd0BN98gG/paHBdvqeINiTMCREkafo692AT5cNFjX+Oq01YSS1JPc0W9NbCcvEUiL2UHfN5yzPOA70TydJWXadsPfkaV5DUUsPzutk9PqjUO6toFtWVajXY0HQhpaP0N3ro7jqlr8nX+IoTS62Qwa86/b6RRCul0tTOOaxwmzd6ZoTl3e0qiltq96+SuDXAirMfY34MHTU2LGWJ+UV0ksj2ckO9l+afQZLcNjowISj9j8ZsapiZB44Su8vd5W…
非常に為になる動画を有り難うございます。他の動画も見て、さらに勉強したいと思います。
質問なのですが、発展問題の解説はされているのでしょうか?
発展課題の解説もよろしくお願いします!!!!
goofle画像検索から画像をスクレイピングするのは、googleの規約違反と言う話をよくサイトで見るのですがスクレイピングしても問題ないのでしょうか?
例えば、google画像検索で石原さとみと検索しその画像を私的なPCのローカルフォルダにスクレイピングの練習として保存する場合
最高!