calendarcodediamondfacebookfingerglobalgoogleplushatenahomepagetopplainpocketrssservicetwitterwordpresshome2searchfoldernext-arrowback-arrowfirst-arrowlast-arrow

Python: Requests モジュールの使い方(スクレイピング、データ収集など)

HTTP クライアントインターフェースとして広く使われている Requests モジュールは、HTTP リソースを簡単に使うためのサードパーティ製のライブラリである。HTTP レスポンスの情報が格納されたオブジェクトが返される。

エンジニア速報は Twitter の@commteで 1 日 5 回配信しています。

Sponsored Link

スクレイピング

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": {

参考

Python おすすめ本

スポンサード リンク

Comments

Leave a Comment

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください