Python requests モジュール
Python requests は一般的な HTTP リクエストライブラリであり、Web サイトに簡単に HTTP リクエストを送信し、応答結果を取得できます。
requests モジュールはurllibモジュールより簡潔です。
requests を使用して HTTP リクエストを送信するには、まず requests モジュールをインポートする必要があります:
import requests
インポート後、HTTP リクエストを送信できます。requests が提供するメソッドを使用して、指定した URL に HTTP リクエストを送信します。例:
サンプル
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 を返す |
サンプル
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 コンテンツを返します:
サンプル
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 リクエストを送信します:
サンプル
import requests
# リクエストを送信
x = requests.request('get', 'https://www.example.com/')
# ウェブページの内容を返す
print(x.status_code)
出力結果は次のとおりです:
200
リクエストヘッダーを設定:
サンプル
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 などです。
サンプル
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 リクエストにパラメータを付ける:
サンプル
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 メソッドもサポートしています。
その他の拡張