torinaブログ

DjangoとBootstrap4で作成したブログ
Python, Django, Kivy, Bootstrap, Apache等のメモです
ソースコード

Python、requestsを使ったダウンロード

Python PythonHTTP
約344日前 2016年3月20日11:37
https://torina.top/main/226/
http://torina.top/main/120/
以前に動画をダウンロードする記事を書きました
requestsを使った画像や動画、音声等ダウンロードの方法は沢山ありますが、今回は2つ紹介します


方法1です
import shutil
import requests


def download(url):
    file_name = url.split("/")[-1]
    res = requests.get(url, stream=True)
    if res.status_code == 200:
        with open(file_name, 'wb') as file:
            shutil.copyfileobj(res.raw, file)


if __name__ == "__main__":
    url = "画像URL"
    download(url)




方法2です
import requests


def download(url):
    file_name = url.split("/")[-1]
    res = requests.get(url, stream=True)
    if res.status_code == 200:
        with open(file_name, 'wb') as file:
            for chunk in res.iter_content(chunk_size=1024):
                file.write(chunk)


if __name__ == "__main__":
    url = "画像"
    download(url)



ダウンロードの場合は、stream=Trueとしましょう
こうすることで、大きいファイルが一気に読み込まれることがなくなります
res = requests.get(url, stream=True)


リクエストが成功した場合です
if res.status_code == 200:


ttp://torina.top/image.pngなら、file_nameにはimage.pngが
ttp://torina.top/bgm.mp3なら、file_nameにはbgm.mp3が入ります
file_name = url.split("/")[-1]



これは1024バイトにわけて書き込んでいます
ちなみにですが、iter_contentを使わずfor chunk in res:とした場合、128バイトずつになります
for chunk in res.iter_content(chunk_size=1024):
    file.write(chunk)


参考
http://docs.python-requests.org/en/master/
http://stackoverflow.com/questions/16694907/how-to-download-large-file-in-python-with-requests-py
http://stackoverflow.com/questions/13137817/how-to-download-image-using-requests