Python初心者の自分自身の勉強のためのPython備忘録です。
現在Python勉強中の方も、ぜひご覧いただき、一緒にPythonをマスターしましょう。
requestsって何これ?
requestsは「PythonでHTTP通信をめちゃくちゃ簡単にできるライブラリ」です。
要はネットからデータを取得する際に利用できます。
主にAPIからデータをとるときに使います。
requestsを使ってみよう
ではrequestsを使ってウェブから情報を簡単に取得してみたいと思います。
requestsをインストールしよう
requestsは最初からPythonの標準モジュールに入っているわけではないので、自分でインストールする必要があります。
まずはコマンドプロンプト(Windows)または、ターミナル(Mac)を開きましょう。
Windowsの場合
- 「スタート」ボタンをクリック
- 「cmd」や「コマンドプロンプト」と検索して開く
Macの場合
- 「Launchpad」→「その他」→「ターミナル」を開く
よくわからん場合は、「Pythonインストールコマンドプロンプト開き方」で検索してみてください。
それではインストールコマンドを入力しましょう
pip install requests
もしpipが見つかりませんと出た場合
pip3 install requests
と打ってみてください。
これで準備はできてるはずです。
まずはGETリクエストをしてみよう
GETリクエストは、簡単にいうとWebページの情報を取得する通信方法です。
たとえばブラウザでホームページを開くときも、裏ではこのGETリクエストが使われています。
基本の使い方
import requests
r = requests.get('http://example.com')
print(r.status_code). #200ならOK
print(r.text) #ページの内容
Pythonのrequestsライブラリをインポートし、requests.get()メソッドを使って指定したURL(http://example.com)に対してHTTPのGETリクエストを送信しています。
このメソッドはレスポンスオブジェクトを返してくれます。
要は、リクエストの結果が全部詰まった箱みたいなもので返してくれます。
レスポンスオブジェクトについては、下で詳しく説明しています。
POSTリクエストを使ってみよう
POSTリクエストは、WebサイトやAPIにデータを送るための通信方法です。
例えば、ネットの「お問い合わせフォーム」や「ログイン画面」で入力したデータを送信するときに使われています。
基本の使い方
import requests
url = '送信先のURL'
data = {'キー1': '値1', 'キー2': '値2'}
response = requests.post(url, data=data)
print(response.text)
url:データを送りたいアドレス(APIやフォームのURL)
data:送りたいデータ(辞書型で書く)
サーバー側でデータを受け取ると、データベースに保存したり、何か処理したりします。
そして返事(レスポンス)が返ってくるので、response.textで内容を確認できます。
送るデータ形式としては主に以下2つがあります。
data=….. フォーム形式(普通のWebフォームと同じです)
json=….. JSON形式(APIでよく使います)
他のHTTPメソッド
HTTPメソッドは、Webサーバーにどんな操作したいかを伝えるための命令みたいなものです。
Webの世界には、データをもらう、送る、更新する色々な操作があると思いますが、それぞれの操作に対応した「命令」があります。
それをHTTPメソッドと呼びます。
よく使うHTTPメソッド一覧
メソッド名 | 主な用途 | 概要 | 例 |
---|---|---|---|
GET | データ取得 | サーバーからデータを「もらう」 | Webページの表示 検索結果の取得 |
POST | データ送信 | サーバーに新しいデータを「送る」 | フォームの送信 ログイン |
PUT | データ更新 | サーバー上のデータを「まるごと上書き」 | 情報全部更新 記事全書き換え |
PATCH | データ一部更新 | サーバー上のデータを「一部だけ更新」 | 名前だけ変える PWだけ変える |
DELETE | データ削除 | サーバー上のデータを「消す」 | アカウント削除 投稿削除 |
HEAD | ヘッダー情報だけ取得 | データ本体は不要で、情報だけほしい | 更新日時取得 |
OPTIONS | 利用可能な操作を確認 | このURLでどんな操作ができるかを取得 | API仕様確認 |
パラメーターやヘッダーの追加
パラメーターやヘッダーってなんやねん!?
それはまた追々詳しく勉強して記事にまとめたいと思います。
要はサーバーに自分の要望や身分を伝えるために必要な指示です。
パラメーター
url = "https://example.com/search"
params = {"keyword": "muscle", "page": 2}
response = requests.get(url, params=params)
print(response.url) #実際にどんなURLでリクエスされたか確認できる
#https://example.com/search&keyword=muscle&page=2となります。
paramsに辞書型で渡すだけで、URLにくっつけてくれます。
ヘッダー
ヘッダーはリクエストの情報の付箋みたいなものです。
例えば、「私は2ポリゴンです。」「この形式でデータがほしい」「認証トークンはこれです」みたいな情報をサーバーに伝えます。
url = "https://example.com/search"
headers = {"UserUser-Agent" = "スクリプト",
"Autorization" = "Bearer トークン"
}
response = requests.get(url, headers=headers)
headersに辞書型で渡すだけです。
レスポンスの扱い方
以下のような情報が「レスポンスオブジェクト」に含まれています。
- ステータスコード(リクエストが成功したかどうか)
- レスポンスの本文(Webページの内容とか、APIのデータ等)
- HTTPヘッダー(サーバーからの追加情報)
- エンコーディング(文字コードの情報)
- リクエストにかかった時間(タイムアウトとか確認したいときに便利
それぞれのレスポンスについて説明します。
status_code
レスポンスのステータスコードを返します。
「200」はリクエストが成功したことを示します。
「404」はNot Found、つまりURLを間違えたり、削除されたページにアクセスしようとしたときに出ます。
「500」は「Internal Server Error」、サーバー側で予期しないエラーが発生したときに出ます。リクエスト自体は正しいけど、サーバーのプログラムや設定にバグ・ミスがあった場合に返されます。
headers
サーバーから返ってきた追加情報(データ形式やサーバー情報、認証情報など)を辞書型で返します。
例{‘Content-Type’: ‘application/json’, …}
text
レスポンスの中身を文字列として取得できます。
HTMLが取得できたり、テキストデータをそのまま使いたいときに役立ちます。
content
レスポンスの中身をバイト列(バイナリ)で取得します。
画像、PDF、音声ファイル、動画ファイルなどテキストじゃないデータを扱うときに便利です。
with open("file.pdf", "wb") as f:
f.write(response.content) #ファイルを保存できます。
json
JSON形式で返ってきたデータを、Pythonの辞書やリストに変換してくれます。
辞書型のJSONデータであれば、辞書型、リスト型のJSONデータであればリスト型で取得できます。
データの抽出や加工が超楽になります。
url
最終的にアクセスされたURLがわかります。
cookies
サーバーから渡されたクッキー情報を取得できます。
ログイン済みのユーザーとしてアクセスしたい場合や、特定の設定を反映したい場合にクッキーを送ることがあります。
encoding
レスポンスの文字コードを取得できます。
UTF-8、Shift_JIS、EUC-JP、ISO-8859-1など
raise_for_status()
ステータスコードがエラー(400番台や500番台)の場合、例外を発生させてくれます。
try:
response.raise_for_status()
ecsept requests.exceptions.HTTPError as e:
print("エラー, e)
詳細は公式ドキュメント見て勉強だ
requestsライブラリの詳細については、公式ドキュメントを見ることをおすすめします。
英語やからむずいけど・・・
まとめ
requestsは直感的に使えるPythonのHTTPライブラリです。
GET/POSTだけじゃなく、パラメーターやファイル操作も楽々にできてしまいます。
何回も使って慣れて、あ!こういうことやるのね!と理解してしまいましょう!
一緒にがんばって勉強しましょう!