PythonでHTTP通信を行う時に大変便利なのが、「Requests」ライブラリです。
「Requests」を使えばPython標準で利用できる「urllib」よりもシンプルにHTTPリクエストをコーディングできます。
- 各種APIとのHTTP通信
- ファイルのダウンロード
- Webスクレイピング
Requestsのインストール
pipでRequestsライブラリはインストールすることができます。
pip install requests
Requestsの使い方
Requestsの基本的の使い方、各種メソッド、レスポンスオブジェクトを紹介します。
基本的なリクエスト方法
基本的な使い方はRequestライブラリでURLを引数に渡して、各HTTPメソッドを実行します。
import requests
url = <ここにURL>
response = requests.get(url)
print(response)
以下が実行結果になります。
>>> import requests
>>> url = https://www.google.co.jp/
>>> response = requests.get(url)
>>> print(response)
<Response [200]>
<Response [200]> というレスポンスオブジェクトが返ってきました。
この中身については後ほど解説します。
200となっているのでHTTPの正常リクエストということがわかります。
利用できるHTTPメソッド
各種HTTPメソッドはRequestsライブラリに容易されているのでリクエスト通信を行うことができます。
メソッド | Requestsライブラリのメソッド |
---|---|
GET | requests.get(url) |
POST | requests.post(url) |
PUT | requests.put(url) |
DELETE | requests.delete(url) |
HEAD | requests.patch(url) |
以下が利用方法例になります。
import requests
url = <任意のURL>
response = requests.get(url)
response = requests.post(url)
response = requests.put(url)
response = requests.delete(url)
response = requests.head(url)
レスポンスオブジェクト
Requestsライブラリの戻り値はレスポンスオブジェクトと呼び、このオブジェクト内に様々な情報が格納されています。
変数 | 利用方法 | 戻り値 |
---|---|---|
url | response.url | リクエスト先URL |
status_code | response.status_code | レスポンスステータス(200 など) |
headers | response.headers | ヘッダー情報 |
text | response.text | htmlやjson形式の文字列型データ |
content | response.content | zip,jpgファイルなど |
以下が利用方法例になります。
import requests
url = https://www.google.co.jp/
response = requests.get(url)
print(response.url)
print(response.status_code)
print(response.headers)
print(response.text)
print(response.content)
よく使うGETリクエストのパターン
ここからはよく使うGETリクエストのパターンを紹介しします。
URLクエリパラメータを渡してGETリクエスト
URLのパラメータをparams引数にディクショナリ型で渡すことができます。
import requests
url = https://www.amazon.co.jp/s/
params = {field-keywords: python}
response = requests.get(url, params=params)
リクエストヘッダーを渡してGETリクエスト
URLのリクエストヘッダーをheaders引数にディクショナリ型で渡すことができます。
import requests
url = https://google.co.jp/s/
headers = {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36}
response = requests.get(url, headers=headers)
print(response.headers)
ファイルを保存するためのGETリクエスト
ファイルを保存するに取得したコンテンツをopenで書き込みます。
最近はファイルサイズも大きくなっているのでチャンク(chunk)を使用して分割する方法をお勧めします。
import requests
import os
url = <任意のURL>
filename = os.path.basename(url)
response = requests.get(url, stream=True)
with open(filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
response.write(chunk)
response.flush()
その他のよく使うGETリクエスト
その他よく使うGETリクエストは以下にまとめております。
よく使うPOSTリクエストのパターン
ここからはよく使うPOSTリクエストのパターンを紹介しします。
FormまたはAPIにPOSTするリクエスト
シンプルなFormまたはAPIにPOSTする時にはDict型でPOSTします。
import requests
url = <任意のURL>
payload = {'data': <送信データ>}
response = requests.post(url, data=payload)
エンコードJSONをPOSTするリクエスト
JSONデータを送信する時には一度エンコードしてあげる必要があります。
import requests
import json
url = <任意のURL>
payload = {'data': <送信データ>}
response = requests.post(url, data=json.dumps(payload))
ファイルをPOSTでアップロード
fileをアップロードするためにはopenメソッドでファイルを開いくことで送ることができます。
import requests
url = <任意のURL>
files = {'file': open('image.jpg', 'rb')}
response = requests.post(url, files=files)