Python requests モジュール

Python requests は一般的な HTTP リクエストライブラリであり、Web サイトに簡単に HTTP リクエストを送信し、応答結果を取得できます。

requests モジュールはurllibモジュールより簡潔です。

requests を使用して HTTP リクエストを送信するには、まず requests モジュールをインポートする必要があります:

import requests

インポート後、HTTP リクエストを送信できます。requests が提供するメソッドを使用して、指定した URL に HTTP リクエストを送信します。例:

サンプル

# requests パッケージをインポート
import requests

# リクエストを送信
x = requests.get('https://www.example.com/')

# ウェブページの内容を返す
print(x.text)

requests リクエストを呼び出すたびに、response オブジェクトが返されます。このオブジェクトには、ステータスコード、応答ヘッダー、応答コンテンツなどの具体的な応答情報が含まれます:

print(response.status_code)  # 获取响应状态码
print(response.headers)  # 获取响应头
print(response.content)  # 获取响应内容

その他の応答情報は次のとおりです:

属性またはメソッド 説明
apparent_encoding エンコード方式
close() サーバーとの接続を閉じる
content 応答の内容をバイト単位で返す
cookies サーバーから送信された Cookie を含む CookieJar オブジェクトを返す
elapsed リクエスト送信から応答到着までの経過時間を含む timedelta オブジェクトを返します。応答速度のテストに使用できます。たとえば、r.elapsed.microseconds は応答到着に必要なマイクロ秒数を示します。
encoding r.text をデコードするエンコード方式
headers 応答ヘッダーを辞書形式で返す
history リクエスト履歴を含む応答オブジェクトのリストを返す(url)
is_permanent_redirect レスポンスが恒久的なリダイレクトの URL である場合は True を返し、それ以外の場合は False を返します。
is_redirect レスポンスがリダイレクトされた場合は True を返し、それ以外の場合は False を返します。
iter_content() レスポンスを反復処理する
iter_lines() レスポンスの行を反復する
json() 結果の JSON オブジェクトを返します(結果は JSON 形式で記述されている必要があり、そうでない場合はエラーが発生します)
links レスポンスの解析済みヘッダーリンクを返す
next リダイレクトチェーン内の次のリクエストの PreparedRequest オブジェクトを返す
ok "status_code" の値を確認し、400 未満の場合は True を返し、400 以上の場合は False を返します。
raise_for_status() エラーが発生した場合、メソッドは HTTPError オブジェクトを返します。
reason レスポンスステータスの説明。例: "Not Found" や "OK"
request このレスポンスを要求したリクエストオブジェクトを返す
status_code HTTP ステータスコードを返します。例: 404 や 200(200 は OK、404 は Not Found)
text レスポンスの内容を unicode 型データで返す
url レスポンスの URL を返す

サンプル

# requests パッケージをインポート
import requests

# リクエストを送信
x = requests.get('https://www.example.com/')

# HTTP ステータスコードを返す
print(x.status_code)

# レスポンスステータスの説明
print(x.reason)

# エンコードを返す
print(x.apparent_encoding)

出力結果は次のとおりです:

200
OK
utf-8

JSON データファイルをリクエストし、JSON コンテンツを返します:

サンプル

# requests パッケージをインポート
import requests

# リクエストを送信
x = requests.get('https://www.example.com/try/ajax/json_demo.json')

# JSON データを返す
print(x.json())

出力結果は次のとおりです:

{'name': '网站', 'num': 3, 'sites': [{'name': 'Google', 'info': ['Android', 'Google 搜索', 'Google 翻译']}, {'name': 'サンプル', 'info': ['サンプル', 'サンプル工具', 'サンプル微信']}, {'name': 'Taobao', 'info': ['淘宝', '网购']}]}

requests メソッド

requests メソッドは次の表のとおりです:

メソッド 説明
delete(url, args) 指定した URL に DELETE リクエストを送信する
get(url, params, args) 指定した URL に GET リクエストを送信する
head(url, args) 指定した URL に HEAD リクエストを送信する
patch(url, data, args) 指定した URL に PATCH リクエストを送信する
post(url, data, json, args) 指定した URL に POST リクエストを送信する
put(url, data, args) 指定した URL に PUT リクエストを送信する
request(method, url, args) 指定した URL に指定したリクエストメソッドを送信する

requests.request() を使用して GET リクエストを送信します:

サンプル

# requests パッケージをインポート
import requests

# リクエストを送信
x = requests.request('get', 'https://www.example.com/')

# ウェブページの内容を返す
print(x.status_code)

出力結果は次のとおりです:

200

リクエストヘッダーを設定:

サンプル

# requests パッケージをインポート
import requests

 
kw = {'s':'python 教程'}

# リクエストヘッダーを設定
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}
 
# params は辞書または文字列のクエリパラメータを受け取ります。辞書型は自動的に URL エンコードに変換されるため、urlencode() は不要です。
response = requests.get("https://www.example.com/", params = kw, headers = headers)

# レスポンスステータスコードを確認
print (response.status_code)

# レスポンスヘッダーの文字エンコードを確認
print (response.encoding)

# 完全な URL アドレスを確認
print (response.url)

# レスポンスコンテンツを確認。response.text は Unicode 形式のデータを返します。
print(response.text)

出力結果は次のとおりです:

200
UTF-8
https://www.example.com/?s=python+%E6%95%99%E7%A8%8B

... 其他内容...

post() メソッドは指定した URL に POST リクエストを送信できます。一般的な形式は次のとおりです:

requests.post(url, data={key: value}, json={key: value}, args)
  • urlリクエスト先の URL。

  • dataパラメータは、指定した URL に送信する辞書、タプルリスト、バイト、またはファイルオブジェクトです。

  • jsonパラメータは、指定した URL に送信する JSON オブジェクトです。

  • argsその他のパラメータは、cookies、headers、verify などです。

サンプル

# requests パッケージをインポート
import requests

# リクエストを送信
x = requests.post('https://www.example.com/try/ajax/demo_post.php')

# ウェブページの内容を返す
print(x.text)

出力結果は次のとおりです:

<p style='color:red;'>本内容是使用 POST 方法请求的。</p><p style='color:red;'>请求时间:
2022-05-26 17:30:47</p>

POST リクエストにパラメータを付ける:

サンプル

# requests パッケージをインポート
import requests

# フォームパラメータ、パラメータ名は fname と lname
myobj = {'fname': 'サンプル','lname': 'Boy'}

# リクエストを送信
x = requests.post('https://www.example.com/try/ajax/demo_post2.php', data = myobj)

# ウェブページの内容を返す
print(x.text)

出力結果は次のとおりです:

<p style='color:red;'>你好,サンプル Boy,今天过得怎么样?</p>

追加のリクエストパラメータ

リクエストを送信する際に、リクエストヘッダー、クエリパラメータ、リクエストボディなどの追加パラメータをリクエストに付加できます。例:

headers = {'User-Agent': 'Mozilla/5.0'}  # 设置请求头
params = {'key1': 'value1', 'key2': 'value2'}  # 设置查询参数
data = {'username': 'example', 'password': '123456'}  # 设置请求体
response = requests.post('https://www.example.com', headers=headers, params=params, data=data)

上記のコードは POST リクエストを送信し、リクエストヘッダー、クエリパラメータ、リクエストボディを付加しています。

基本的な GET および POST リクエストに加えて、requests は PUT、DELETE、HEAD、OPTIONS などの他の HTTP メソッドもサポートしています。

その他の拡張