LoginSignup
1
1

More than 3 years have passed since last update.

imgurからランダムに画像を取得する with python3 requests

Last updated at Posted at 2019-10-09

目的

機械学習に使うために、ランダムな画像をたくさん集めたかったのが始まりです。

概要

imgurの画像、大体圧縮リンクがhttps://i.imgur.com/XXXXX[.jpg | .png]になってるようです。
じゃああとはお分かりですね。5文字のランダムな英数字(大文字・小文字・数字)からなる文字列を作成し、画像を取得すればいいだけです。

数回に1回はremoved.pngにリダイレクトされてしまうので、そうなったらやり直しです。

実装

# 再帰による実装
def get_imgur_url(length: int, start: str = None) -> str:
    if length <= 0:  # エラー処理
        return ''

    buffer = random.choice(string.ascii_letters + string.digits)
    buffer = start + buffer if start else buffer

    if length <= 1:  # 再帰の末尾
        return 'https://i.imgur.com/' + buffer + random.choice(['.png', '.jpg'])

    return get_imgur_url(length-1, buffer)


# これも再帰
def get_imgur_random(count: int):
    if count <= 0:
        # 再帰の末尾
        return

    url = get_imgur_url(5)
    ext = url.split('.')[-1].rstrip('/')  # 拡張子
    resp = requests.get(url)  # 画像の取得

    if resp.history:  # historyが存在すればリダイレクトされてるってこと
        return get_imgur_random(count)

    binary = resp.content
    resp.close()

    with open(f'./imgur_images/{uuid.uuid4()}.{ext}', 'wb') as f:
        f.write(binary)

    return get_imgur_random(count - 1)  # 再帰


if __name__ == '__main__':
    get_imgur_random(10)

1
1
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
1
1