TL;DR
HTTP クライアントインターフェースとして広く使われている Requests モジュールは、HTTP リソースを簡単に使うためのサードパーティ製のライブラリである。HTTP レスポンスの情報が格納されたオブジェクトが返される。
スクレイピング
Requests モジュールを使って、REST API や Web スクレイピング(データ収集と加工)ができる。Web ページをダウンロード、情報抽出を行った上で、自動レポート作成も簡単にできてしまう。
※ HTTP(Hypertext Transfer Protocol)はリクエストとレスポンスを交換するプロトコル。
Requests モジュール のポイント
- requests は get()で GET リクエストを実行する
- 戻り値にレスポンスが入ったオブジェクトを得ることができる
- テキスト表示や URL を返す様々な属性が用意されている
Requests のインストール
pip install requests
リクエスト一覧
リクエスト | 意味 |
---|---|
requests.get | GET |
requests.post | POST |
requests.put | PUT |
requests.delete | DELETE |
requests.head | HEADER |
使用例
r = requests.put('https://httpbin.org/put', data={'key': 'value'})
r = requests.delete('https://httpbin.org/delete')
r = requests.head('https://httpbin.org/get')
r = requests.options('https://httpbin.org/get')
次のコードは、httpbin.org という URL に向けて GET を実行し、そこから得られる結果を print 出力している。
ローカルファイルを開くのと同じようにリモートファイルを開くことができる。ただし、読み込みモードしか使えない。
※ httpbin.org は HTTP のリクエストとレスポンスサービス。API の通信テストに活用できるので、メモしておくとよいだろう。
import requests
r = requests.get("https://httpbin.org/")
print(r.text)
結果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>httpbin.org</title> ...
Response 属性一覧
r と呼ばれる Response オブジェクトから、必要な情報を全て取得することができる。
属性 | 意味 |
---|---|
r | Response [レスポンスコード] |
r.status_code | ステータスコード |
r.text | body をテキスト形式で返す |
r.url | URL を返す |
r.encoding | エンコーディング |
r.headers | レスポンス |
r.json() | JSON 形式 |
JSON
JSON データを扱う場合、組み込みの JSON デコーダーもある。r.json()と記述する。デコードが失敗した場合、r.json()例外が発生する。
payload = {'k1': 'v1', 'k1': 'v2'}
r = requests.get("http://httpbin.org/get", params=payload)
r.json()
結果
{'args': {'k1': 'v2'},
'headers': {'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Host': 'httpbin.org'...
'url': 'http://httpbin.org/get?k1=v2'}
r.status_code
ステータスコードの表示。
r = requests.get("http://httpbin.org/get")
print(r.status_code)
# 200
r.encoding
r = requests.get("http://httpbin.org/get")
print(r.encoding)
# None
r.headers
r = requests.get("http://httpbin.org/get")
print(r.headers)
# {'Date': 'Sat, 20 Nov 2021 02:08:13 GMT', ...}
パラメータを渡す
パラメータは params の中に入れる。キーワード引数を辞書(ハッシュ)で指定することで、GET パラメータを付けることができる。
payload = {'k1': 'v1', 'k1': 'v2'}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.text)
結果
{
"args": {
"k1": "v2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
},
"url": "http://httpbin.org/get?k1=v2"
}
URL
url をつけると、エンコードされた URL そのものを表示する。
payload = {'k1': 'v1', 'k1': 'v2'}
r = requests.get("http://httpbin.org/get", params=payload)
print(r.url)
# http://httpbin.org/get?k1=v2
POST
post()関数や put()関数 API も利用できる。
import requests
r = requests.post('https://httpbin.org/post', params={'japan' : 'blue'})
r.json()
結果
{'args': {'japan': 'blue'},
'data': '',
'files': {},
'form': {},
'headers': {'Accept': '*/*',...
エンコードしたデータを送信する場合、data 引数に辞書を渡す。
import requests
payload = {'k1': 'v1', 'k1': 'v2'}
r = requests.post('https://httpbin.org/post', data=payload)
print(r.text)
結果
{
"args": {},
"data": "",
"files": {},
"form": {
"k1": "v2"
},
"headers": {
...
},
"json": null,
"url": "https://httpbin.org/post"
}
JSON 文字列を指定する場合。
import requests
import json
payload = {'k1': 'v1', 'k1': 'v2'}
r = requests.post('https://httpbin.org/post', json=json.dumps(payload))
print(r.text)
結果
{
"args": {},
"data": "\"{\\\"k1\\\": \\\"v2\\\"}\"",
"files": {},
"form": {},
"headers": {