Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

google image downloadが動かなかったのでその対応

前提

コマンドサンプルはWindows+Anaconda環境で実行したものです。
またアカウント名など一部パスは伏字にしていますので、各環境に合わせて読み替えてください。

結論

先に結論からお伝えしておくと、Google画像検索の仕様変更により、公式ツールのスクレイピングがうまく動かなくなっているのが原因です。
公式のGigHubにパッチのPRを投げている方がいましたので、そちらのソースをダウンロードしてから実行すれば、正常に動作させることができます。

Google Image Downloadが動かない!

Tensorflowなどを使って画像認識をさせたいなと思い、学習用の画像を収集しようと
https://qiita.com/too-ai/items/4fad0239b8b3c465fe6d
https://qiita.com/Ikko_Kojima/items/4d943c60ff5e886a0544
このあたりのページを参考に、Google Image Downloadを使って画像を収集しようとしたのですが

(base) PS C:\Users\*\Downloads\img> googleimagesdownload -k cat

Item no.: 1 --> Item name = cat
Evaluating...
Starting Download...


Unfortunately all 100 could not be downloaded because some images were not downloadable. 0 is all we got for this search filter!

Errors: 0


Everything downloaded!
Total errors: 0
Total time taken: 0.609447717666626 Seconds

このように、エラーにならず、ディレクトリも作成される(実行環境の下に downloads\ KEYWORD )のにその下にファイルは一つも保存されていないという結果になりました。

何が原因か不明でしたが、とりあえず中を見てみるかと、

pip install google_images_download

ではなく

git clone https://github.com/hardikvasa/google-images-download.git

を実行してソースを取得して中身をのぞいてみました。

Pythonには不慣れですが、幸い、このソフトは実質実行ファイルは1つだけで構成されていたため、画面に出力されているキーワードをもとにソースを読み始めたところ、問題となっていたポイントはすぐに特定できました。

#714-724行目
    def _get_next_item(self,s):
        start_line = s.find('rg_meta notranslate')
        if start_line == -1:  # If no links are found then give an error!
            end_quote = 0
            link = "no_links"
            return link, end_quote
        else:
            start_line = s.find('class="rg_meta notranslate">')
            start_object = s.find('{', start_line + 1)
            end_object = s.find('</div>', start_object + 1)
            object_raw = str(s[start_object:end_object])

という箇所があるのですが、この辺のキーワードとして設定されている rg_meta notranslate{ が、現在の検索結果に見当たらず、画像データを正常に取得できなくなっています。

当初、自分でこのあたりのキーワードを調整すれば何とか出来るかな~と思ったのですが、もともとどんな状態で切り出してその後の処理に渡しているのかがわからず難航したので公式サイトを改めて確認したところ、パッチをプルリクエスト投げている方がいました。

パッチ

https://github.com/Joeclinton1/google-images-download/tree/patch-1

こちらのページのClone or Downloadのところから、URLを取得して git clone するかZIPをダウンロードして、ソースを取得して、そのソースを使って実行します。
私はgit cloneで取得しました。

C:\Users\*\Downloads\img>git clone https://github.com/Joeclinton1/google-images-download.git gid-joeclinton
Cloning into 'gid-joeclinton'...
remote: Enumerating objects: 13, done.
remote: Counting objects: 100% (13/13), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 621 (delta 7), reused 0 (delta 0), pack-reused 608
Receiving objects: 100% (621/621), 272.98 KiB | 718.00 KiB/s, done.
Resolving deltas: 100% (358/358), done.

同じフォルダ内に本家のソースがあったので、こちらのソースは gid-joeclinton というフォルダを作成して保存。
したがって実行時にはそちらのソースを指定して実行

(base) PS C:\Users\*\Downloads\img> python .\gid-joeclinton\google_images_download\google_images_download.py
 -k cat

Item no.: 1 --> Item name = cat
Evaluating...
Starting Download...
Completed Image ====> 1.Layer-1704-1920x840.jpg
Invalid or missing image format. Skipping...
Completed Image ====> 2.An_up-close_picture_of_a_curious_male_domestic_shorthair_tabby_cat.jpg
Completed Image ====> 3.Thinking-of-getting-a-cat.png
Completed Image ====> 4.cat-10-e1573844975155.jpg
(中略)
Completed Image ====> 72.15276403_web1_190123-VNE-CatLeash.jpg
Completed Image ====> 73.CatsHaveFacialExpressionsButHardToRead_600.jpg
Completed Image ====> 74.Banner3.jpg


Unfortunately all 100 could not be downloaded because some images were not downloadable. 74 is all we got for this searc
h filter!

Errors: 26

Everything downloaded!
Total errors: 26
Total time taken: 120.21685576438904 Seconds

使い慣れた方ならすぐに思いつくのでしょうけど、パッチの方を直接ダウンロードさせてもらって使うという経験があまりなくて、すぐには思いつけなかったので、自分のメモを兼ねて書き留めておきました。
どなたかの参考になれば幸いです。

追記

こちらのパッチですが、PRのIssueの中で話がされていますが -l オプションをつけても、100件以上の取得ができない状態の様です。
https://github.com/hardikvasa/google-images-download/pull/298
100未満の数字を指定する分にはうまく動くのですが、100より大きな数字を指定すると、エラーになって動きませんのでご注意ください。

taedookim
専門学校卒業後、SE -> 大学入学 -> NPO法人 -> 新聞社(記者職) -> 新聞社(デジタル部門) -> SE -> SE(今ここ)と、いろいろフラフラした経歴です。 小さい組織での勤務経験が多いので、設計からテスト、バックエンドからフロントまでと、一通り大抵の工程をかじっていますが、一点特化の能力が無いな〜というのが最近の悩み。
http://taedoo.at.webry.info/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away