こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
【Python×Requests】Webサイトからファイルをダウンロードする方法
Web上のファイルをダウンロードする処理は、上図のようにHTTP通信と同様の流れになります。
①クライアント側がダウンロードしたいファイル(画像、テキスト、pdfファイル等)リンクを指定し、HTTPリクエストを送信すると、②Webサーバー側がファイルコンテンツに対応するHTTPレスポンスを返します。
本記事で紹介するWebサイトからファイルをダウンロードする方法の特徴は、上図HTTP通信における処理をPythonプログラムで代替するイメージを持っていただければと思います。
プログラミング手順
プログラミング作業の流れを下記に示します。各手順で活用するPythonメソッドの詳細は、後述のプログラミング手法と合わせて解説します。
プログラミング手順 | 活用モジュール | |
---|---|---|
1 | Webからファイルデータをダウンロード | requests.get() |
2 | ハードウェア・ローカル環境保存用にファイルを作成 | open() |
3 | ローカルファイルにWebからダウンロードしたデータを書込 | iter_content() write() |
事前準備
実際のプログラミングではrequrestsモジュールを用い、Webからファイルをダウンロードします。requestsモジュールを活用すると、ネットワークエラーや、インターネット接続上の問題、データ圧縮のような複雑の考慮点を意識することなく、容易にファイルをダウンロードできるようになります。
下記コマンドを入力し、事前にモジュールをインストールしましょう。
pip install requests
【Python】Webサイトからファイル情報をダウンロードしローカルに保存
ここからはプログラミング解説になります。手順に沿って1つずつみていきましょう!
requestsモジュール|Webからファイルデータをダウンロード
HTTP通信に基づきWeb上からファイル情報を取得するには、requests.get()
メソッドを用います。Webサイトのデータを取得する際に広く用いられるメソッドです。下記のようにコードを記載しましょう。
#モジュール読込
import requests
url = "ダウンロードしたいファイルリンクを記載"
response = requests.get(url)
requests.get()
にダウンロードするURLを文字列として渡すと、Responseオブジェクトが戻り値として得られます。
requests.get()メソッドによるリクエストが成功したかどうかはResponseオブジェクトのstatus_codeを活用して次のように確認することができます。ここでstatus_code = 200
が出力されればリクエスト成功です。
# レスポンスのステータスコード
print(response.status_code)
# 出力イメージ
# 200
open関数|ハードウェア・ローカル環境保存用にファイル作成
上記で取得したWeb上のファイルデータをお手元のPC等に保存するには、そのデータを書き込むためのローカルファイルを事前に作成しておく必要があります。open関数
を用いて下記のようにコードを記載しましょう。
file = open("ファイル名.拡張子","wb")
ローカルファイルの作成では、open関数を用います。open関数とはファイル操作を行うためのメソッドであり、新規ファイルの作成や書き込み、読込、更新操作を実行できます。今回は、open関数に”wb”を渡し、バイナリ書き込みモードで新規ファイル生成しています。
ローカルファイルにWebからダウンロードしたファイルデータ書込
ローカルファイルにWeb上から取得したファイルデータを書き込むには、下記のようにコードを実行します。
#iter_content()メソッドでWebファイルのデータを渡す
for chunk in response.iter_content(100000):
#ファイル書込
file.write(chunk)
#ファイルを閉じる
file.close()
Webページのファイルデータを書き込むには、for構文とiter_content()メソッドを用います。まず、ループの繰り返し毎に、iter_content()メソッドでファイルデータのチャンクを返します。
各チャンクに格納する最大バイト数は指定可能です。100キロバイトが適切なサイズであるため、iter_content()の引数には100000を渡しています。各チャンクをローカルファイルに書き込む方法としては、write()メソッドを用います。
【Python実践】Webサイトから画像をダウンロードしローカルに保存する
この見出しではWebサイトから画像データを取得・ローカル保存する方法を例としたPythonプログラミング手法を解説します。
画像URLは当サイトが提供するURLを指定しています。また、後述で示すコードは、前述で紹介したコーディング方法とほぼ同じであるため、具体的な解説は割愛します。
import requests
# 画像リンクを指定
url = "https://di-acc2.com/wp-content/uploads/2022/07/sampleimage.jpg"
# レスポンス
response = requests.get(url)
# ローカル環境にファイルを作成|今回画像であるため拡張子はjpegを指定
file = open("sample.jpg","wb")
# ファイルをローカルに書き込む
for chunk in response.iter_content(100000):
file.write(chunk)
# ファイル保存完了
file.close()
【Python】Webファイルダウンロード用Pythonひな型コードまとめ
ここまでの解説をもとに、Webサイトからファイルをダウンロードする際のひな型コードを以下に示します。
画像やテキスト、CSV、PDF、HTMLなどダウンロードしたい様々なファイル拡張子に対して活用できるコードとなっています。
import requests
import os
url = "ダウンロードしたいファイルリンクを指定"
file_dir = "ファイルの保存先指定"
def download_files(url,file_dir):
#Web上のファイルデータをダウンロード
response = requests.get(url)
#HTTP Responseのエラーチェック
try:
response_status = response.raise_for_status()
except Exception as exc:
print("Error:{}".format(exc))
# HTTP Responseが正常な場合は下記実行
if response_status == None:
#open()関数にwbを渡し、バイナリ書き込みモードで新規ファイル生成
file = open(os.path.join(file_dir,os.path.basename(url)),"wb")
#各チャンクをwrite()関数でローカルファイルに書き込む
for chunk in response.iter_content(100000):
file.write(chunk)
#ファイルを閉じる
file.close()
print("ダウンロード・ファイル保存完了")
「第一引数:ダウンロードしたいWebファイルのリンク」「第二引数:ファイルの保存先(ディレクトリ)」を渡すようにしましょう。この時、第一引数と第二引数の拡張子は揃えるようにしましょう。
そしてdownload_files()
関数を実行すると、目的のファイルがWebから取得できるでしょう。
url = "ダウンロードしたいファイルリンクを指定"
file_dir = "ファイルの保存先指定"
download_files(url, file_dir)
【参考】PythonでWebデータ収集するためのおすすめ学習法
Webデータ収集・おすすめ学習法
当サイトではPythonを用いてWebサイトから目的のデータを取得できるようになりたい方向けに、おすすめの学習教材についてもご紹介しています。
【Python】Webスクレイピング学習におすすめの入門本・動画教材8選|Webデータ収集・ブラウザ操作の自動化支援
「Webスクレイピングに興味がある!ビジネス現場で活用したい!」「BeautifulSoup、Request、Selenium等のPythonスクレイピングライブラリを使いこなせるようになりたい」このような要望にお応えします。
Webスクレイピングについて詳しく知りたい方はこちら
当サイトではWebスクレイピングを活用したデータ取得方法についても別途解説しています。
Webスクレイピング(Web Scraping)とは、WebサイトのHTMLからデータを抽出する技術を指します。スクレイピング、Webスクレイピングの他に、Webデータ抽出、データスクレイピング、ウェブ・クローラー、ウェブ・スパイダー等と呼ばれることもあります。
【Web情報解析の自動化】「Webスクレイピングとは」概要や法律課題まで徹底解説
Webサイト上のデータを収集し、企業のマーケティング活動等に活かせるスクレイピング技術。とても便利な反面、法律面での注意点がいくつかあります。本記事では、Webスクレイピングとは何か?ご紹介します。加えて、Webスクレイピングの利用用途及び法律やコンプライアンス面で注意すべき点について図解も交えて詳しくご紹介します。
Webスクレイピング・データ取得に関する配信記事
Python×Webスクレイピング|記事一覧
Pythonを用いて面倒な「Webデータ調査を自動化する方法」について解説。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら