Requests in Python は、Python を使って Web ページに HTTP/1.1 リクエストを送ることができるエレガントなライブラリです。
Python 2.7と3.5+の両方で公式にサポートされています。
Keep – Alive, Connection Pooling, Sessions with persistent cookies, Browser Style SSL verificationなどの先進的な機能により、開発者にとって最適な選択肢となっています。
この記事では、これらの機能の一部と、Webリクエストを作成するためにPython Requestsモジュールを使用してどのように始めることができるかについて、より詳しく学びましょう。
How to Install Requests in Python?
Pythonでのリクエストのインストールは簡単でわかりやすい方法です。
Pythonでモジュールをインストールするには、いくつかのアプローチがあります。
しかし、この記事ではpipモジュールを使った方法を紹介します。
ターミナルまたはコマンドプロンプト(Windowsユーザの場合)を開き、以下のコマンドを入力します。
pip install requests
#Or (if the first command doesn't work) use:pip3 install requests
|
これで、requestsモジュールが端末にインストールされるはずです。
PythonでRequestsを使う
Requestsモジュールがどのように動作するかを理解するためには、私たちがWebを閲覧するときに何が起こっているのか、そしてどのようにあなたが見たいと思っていたコンテンツを瞬時に表示するのかという基本的なことを知る必要があります。
リンクをクリックするたびに、私たちはHTTP(Hypertext Transfer Protocol)リクエストをリクエストページのサーバーに送信します。
サーバーはそのリクエストを受け取ると、私たちがリクエストした正しいコンテンツを送り返します。
これから学ぶHTTPリクエストは、GETリクエストとPOSTリクエストの2つが最も便利です。
次の節では、これらのメソッドを requests ライブラリでどのように使用するかを学びます。
しかし、その前にあなたのスクリプトやインタープリタにインポートする必要があります。
import requests
|
1. GETリクエスト
このメソッドは、選択したURLのコンテンツをサーバーに要求していることを示すために使用されます。
そこで、HTTPリクエストを使ってgoogleのホームページを取得したいとします。
次の行を入力します。
r = requests.get("http://google.com")
|
この一行が何をするかというと、get()メソッドを介してGoogleのホームページにHTTP GETリクエストを送信します。
そして、レスポンスオブジェクトが変数 ‘r’ に格納されます。
レスポンスオブジェクトのインスタンスは、保持するデータをさらに分類し、適切な属性に格納します。
以下はその例です。
print(r.status_code)
#The output provides the status code for the url. For a success full attempt, the result is 200print(r.headers)
#The following attribute returns a python dictionary containing key-value pair of the headersprint(r.text)
#This command prints out the response content from the server or Static Source Code. print(r.encoding)
r.encoding = 'utf-8'
#Requests library also allows you to see or change the encoding of the response content. |
2. GET メソッドでパラメータを渡す
GETメソッドだけでは必要な情報が得られないことがよくあるので、GETリクエストに追加でパラメータを渡す必要があります。
パラメータとは、主にタプルやリストで囲まれたキーと値のデータの組のことです。
これを送信するには、get() メソッドの params パラメータを使用します。
構文についてはこちらをご覧ください。
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get('http://httpbin.org/get', params=payload)
print(r.text)
|
結果は以下の通りです。
{ "args": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5f9a64d1-2abfc74b2725386140a897e3"
},
"origin": 0.0.0.0,
"url": "http://httpbin.org/get?key1=value1&key2=value2"
} |
3. POST リクエスト
PythonのGETリクエストとは異なり、HTTPのPOSTメソッドはペイロードを一緒に投稿する必要があります。
このメソッドは、データを直接返すのではなく、サーバーに送信するために使用されます。
リクエストライブラリの中で、post()メソッドを使ってPOSTにアクセスできます。
構文を見てみましょう。
import requests
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post("https://httpbin.org/post", data=payload)
print(r.text)
|
結果は以下の通りです。
{ "args": {},
"data": "",
"files": {},
"form": {
"key1": "value1",
"key2": "value2"
},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Content-Length": "23",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0",
"X-Amzn-Trace-Id": "Root=1-5f9a6726-276da087230912e01dd5dcd7"
},
"json": null,
"origin": [REDACTED],
"url": "https://httpbin.org/post"
} |
Python におけるリクエストのいくつかの高度な機能
この記事では主に、最も基本的でありながら非常に重要な2つのHTTPメソッドに焦点を当てています。
しかし、requestsモジュールはPUT、PATCH、DELETEなどの多くのメソッドをサポートしています。
リクエストモジュールが開発者の間で有名な理由の1つは、次のような先進的な機能です。
- セッションオブジェクト。セッションオブジェクト:これは主に、異なるリクエスト間で同じクッキーを保存するために使用され、全体的に高速な応答を提供します。
-
- SOCKSプロキシのサポート。別の依存関係(’requests[socks]’と呼ばれる)をインストールする必要がありますが、特にサーバーレートがあなたのIPを制限している場合、複数のリクエストのパフォーマンスを大幅に向上させることができます。
- SSL検証。get()メソッドに “verify=True “という追加引数を与えることで、ウェブサイトがSSLを適切にサポートしているかどうかを、requestsを使用して強制的にチェックすることができます。ウェブサイトがSSLを正しくサポートしていない場合、スクリプトはエラーを投げます。
まとめ
Webスクレイピングであれ、他のHTTP関連の仕事であれ、requestsモジュールは最も人気のあるオプションです。
リクエストモジュールの唯一の欠点は、モジュールが javascript コマンドを実行するように設計されていないため、ページのソースコードにおける動的な変更を処理することです。
この記事がモジュールが何をするかについての基本的な考えを提供することを願っています。
リソース
このモジュールについての詳細は、公式ドキュメントサイト https://requests.readthedocs.io/en/master/ を参照してください。
公式 Github レポ: https://github.com/psf/requests