duckduck_searchライブラリを使って、画像のURLを取得する方法

Python
元教師
元教師

こんにちは!データサイエンティストの青木和也(https://twitter.com/kaizen_oni)です!

今回の記事では、duckduck_searchを使って画像のURLを取得する方法を紹介します!

私は「Practical Deep Learning for Coders」でDeep Learningの復習をしているのですが、第1章の

Getting Started」の序盤からduckduck_searchの実装の違いにつまづいてしまったので、当レッスンのコードをduckduck_searchの最新版(ver 4.4)に書き換えたコードを紹介していきたいと思います!

同じようなところで詰まっている方に届けば幸いです!

元コード

第1章の授業用Kaggle notebook「Is it a bird? Creating a model from your own data」の元コードは以下の通りです。

!pip install duckduckgo-search==1.1
from duckduckgo_search import ddg_images
from fastcore.all import *

def search_images(term, max_images=30):
    print(f"Searching for '{term}'")
    return L(ddg_images(term, max_results=max_images)).itemgot('image')

ここでは、duckduckgo-searchのバージョンを1.1に指定してし、search_images関数の中でduckduck_searchのddg_images関数を使用しています。

このコードは以下のコードによって実行されるのですが、どうにもうまくいきません。

#NB: `search_images` depends on duckduckgo.com, which doesn't always return correct responses.
#    If you get a JSON error, just try running it again (it may take a couple of tries).
urls = search_images('bird photos', max_images=1)
urls[0]

修正版のコード

そこで元コードを以下のように書き換えます。

!pip install duckduck-search==4.4
from duckduckgo_search import DDGS
from fastcore.all import *

def search_images(term, max_images=30):
    print(f"Searching for '{term}'")
    with DDGS() as ddgs:
        images = list(ddgs.images(term,max_results = max_images))
        urls = []
        for image in images:
            print(image)
            urls.append(image['image'])
        return urls

上記のコードでは、以下の4つの手順を変更しています。

  • インストールするduckduck-searchのバージョンを1.1から4.4に引き上げます
  • duckduck_searchライブラリからDDGSクラスをインポート
  • DDGSクラスのddgsメソッドを使って画像の検索情報のリストを取得
  • for文を使って、検索情報のリストから画像のURLを抽出して、画像のURLのリストを作成します

すると、先ほどのURL取得コードがうまく実行できるようになります。

この後の後続コードについても検証しましたが、全て正常に機能することを確認できました。

まとめ

今回の記事では、「Practical Deep Learning for Coders」の第1章の「Getting Started」のKaggle notebookのdockdock-searchライブラリのエラー部分についての修正コードを紹介いたしました。

「こんなコードの方がいいんじゃない?」という提案があればどしどし受け付けていますので、気軽にコメントいただけると幸いです。

コメント

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