LoginSignup
6
3

More than 3 years have passed since last update.

pythonでflickrから画像データをスクレイピングする方法

Posted at

Flickrの利用方法

Flickr APIよりkeyを取得する

まずFlickrのページへいきRequest an API Keyをクリックする。ここでFlickrのアカウントを作成していない場合は作成しログインしておく。
0.png

左側が無償(非商法)、右側が有償(商法)用なので、赤線で囲んであるAPPLY FOR A NON-COMMERICIAL KEYを選択する。
1.png

するとアプリケーションの登録画面が表示されるのでアプリケーションに使用する名前と使用用途を記載し、SUBMITをクリックする。
2.png

登録後、key と Secret が取得できるのでメモ帳などに控えておく。
3.png

Flickr APIから画像を取得するプログラムを作成する

以下のコマンドよりFlickrのモジュールをインストールする。

pip install flickrapi

プログラム実行前に、取得した画像を保存するフォルダを作成する。

download.py
from flickrapi import FlickrAPI
from urllib.request import urlretrieve
from pprint import pprint
import os,time,sys


key = "取得したkey"
secret = "取得したSecret"
wait_time = 1

# コマンドラインの引数の1番目の値を取得。以下の場合は[cat]を取得
# python download.py cat 
animalname = sys.argv[1]
savedir = "./"+animalname


# format:受け取るデータ(jsonで受け取る)
flickr = FlickrAPI(key, secret, format='parsed-json')

"""
text : 検索キーワード
per_page : 取得したいデータの件数
media : 検索するデータの種類
sort : データの並び
safe_seach : UIコンテンツの表示有無
extras : 取得したいオプションの値(url_q 画像のアドレス情報)
"""
result  = flickr.photos.search(
    text = animalname,
    per_page = 400,
    media = 'photos',
    sort = 'relevance',
    safe_seach = 1,
    extras = 'url_q, licence'
)

# 結果
photos = result['photos']
pprint(photos)

上記のプログラムを実行し、成功すると以下の表示がされる。

           {'farm': 5,
            'height_q': 150,
            'id': '4375810205',
            'isfamily': 0,
            'isfriend': 0,
            'ispublic': 1,
            'owner': '47750313@N07',
            'secret': '8d0a7d24a1',
            'server': '4008',
            'title': 'cat',
            'url_q': 'https://live.staticflickr.com/4008/4375810205_8d0a7d24a1_q.jpg',
            'width_q': 150},
           {'farm': 1,
            'height_q': 150,
            'id': '27083352608',
            'isfamily': 0,
            'isfriend': 0,
            'ispublic': 1,
            'owner': '144380504@N04',
            'secret': 'd1cd159107',
            'server': '811',
            'title': 'cat',
            'url_q': 'https://live.staticflickr.com/811/27083352608_d1cd159107_q.jpg',
            'width_q': 150}],

'url_q'に登録されているURLを取得し、urllibを使用して画像データを取得する。

さきほどのプログラムに画像データを取得するプログラムを追加する。

for i,photo in enumerate(photos['photo']):
    url_q = photo['url_q']
    filepath = savedir + '/' + photo['id'] + '.jpg'

   # 重複したファイルが存在する場合スキップする。
    if os.path.exists(filepath):continue
   # 画像データをダウンロードする
    urlretrieve(url_q, filepath)
   # サーバーに負荷がかからないよう、1秒待機する
    time.sleep(wait_time)

「cat」を引数にプログラム実行後、猫の画像がFlickrから取得できた。

4.png

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3