Webスクレイピングで画像コレクションを作成するツール

はじめに

Python3のrequests, BeautifulSoup, osモジュール等を組み合わせて,画像収集ツールを作成しました.
適当なキーワードをコマンドライン引数に指定して実行すると,関連した画像を自動的にダウンロードします.
ダウンロードされた画像は,Pythonファイルと同階層に生成されるディレクトリ内に,キーワード別に保存されます.

ソースコード

#! python3
# imageCollector.py

import requests, os, sys, webbrowser
from bs4 import BeautifulSoup

URL = "https://www.google.co.jp/search?tbm=isch&q="

def main():
    # 検索ワードの取得
    if len(sys.argv) == 1:
        print("[*] Usage: python3 {} <keyword 1> <keyword 2> ...".format(sys.argv[0]))
        sys.exit()
    else:
        keyword = " ".join(sys.argv[1:])

    # ファイル名の生成
    filename = ""
    for word in sys.argv[1:]:
        filename += (word + "_")

    # フォルダがなければ生成
    if not os.path.isdir(r"./imageCollector"):
        os.mkdir(r"./imageCollector")
    if not os.path.isdir(r"./imageCollector/" + filename[:-1]):
        os.mkdir(r"./imageCollector/" + filename[:-1])
    os.chdir(r"./imageCollector/" + filename[:-1])

    # 検索結果の取得
    res = requests.get(URL + keyword)
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "html.parser")

    # 画像タグの取得
    image_tags = soup.find_all("img")

    # 画像タグ1つ1つについてダウンロード
    for num, image_tag in enumerate(image_tags, start=1):
        # 10件でストップ
        if num > 10:
            break

        print("[*] Downloading ->  {}{:02d}.jpg ...".format(filename, num), end=" ")
        res_img = requests.get(image_tag.get("src"))
        res_img.raise_for_status()

        # ファイルオープン
        with open(r"./" + filename + str(num) + ".jpg", "wb") as f_write:
            for chunk in res_img.iter_content(100000):
                f_write.write(chunk)

        print("Done")

    print("[*] Download Completed!")
    webbrowser.open(r"file:///" + os.getcwd())
    sys.exit()

if __name__ == '__main__':
    main()

実行例

>python imageCollector.py
[*] Usage: python3 imageCollector.py <keyword 1> <keyword 2> ...

>python imageCollector.py いらすとや フリー 動物
[*] Downloading ->  いらすとや_フリー_動物_01.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_02.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_03.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_04.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_05.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_06.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_07.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_08.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_09.jpg ... Done
[*] Downloading ->  いらすとや_フリー_動物_10.jpg ... Done
[*] Download Completed!

実行後は,ディレクトリが自動表示されます.
f:id:Szarny:20171010201351p:plain

参考文献

www.oreilly.co.jp