stmtkブログ

Python中心の技術ブログです。

【Python】Flickrの検索結果をダウンロードする

機能

Flickrの検索結果をダウンロードするPythonプログラムです。

任意のキーワードでFlickr検索を行い、検索結果の先頭20件の画像をダウンロードします。

サンプル動画

youtu.be

プログラム

#! python3
# 機能
#  Flickrの検索結果をダウンロードする
# 使い方
#  1.Pythonを実行する
# 実行コマンド
#  python flickr_downloader.py キーワード
#  python flickr_downloader.py 朝食
#  python flickr_downloader.py 朝食 和食

import os
import re
import sys
import bs4
import requests

# Flickrの検索結果をダウンロードする関数
def download_flickr(keywords, max_images, folder):
    os.makedirs(folder, exist_ok=True)

    # キーワードでFlickr検索
    url = "http://www.flickr.com/search/?text=" + " ".join(keywords)
    print(url)
    res = requests.get(url)
    res.raise_for_status()

    # 画像のタグ取得
    soup = bs4.BeautifulSoup(res.text, "lxml")
    links = soup.select(".photo-list-photo-view")

    regex = re.compile(r"url\((.+?)\)")
    for i in range(min(max_images, len(links))):
        # 画像ダウンロード
        img_url = "https:" + regex.search(links[i].get("style")).group(1)
        print(img_url)
        img_res = requests.get(img_url)
        img_res.raise_for_status()

        # 出力フォルダに画像を保存
        file_name = os.path.basename(img_url)
        with open(os.path.join(folder, file_name), "wb") as img_file:
            for chunk in img_res.iter_content(100000):
                img_file.write(chunk)


if len(sys.argv) < 2:
    sys.exit("使い方:python flickr_downloader.py キーワード")

download_flickr(sys.argv[1:], 20, "images")

使い方

  1. Pythonを実行する

実行コマンド

python flickr_downloader.py キーワード
python flickr_downloader.py 朝食
python flickr_downloader.py 朝食 和食

requestsとbs4をインストールしていない場合は以下のコマンドでインストールして下さい。

pip install requests
pip install beautifulsoup4

参考文献

www.oreilly.co.jp