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

TwitterFacebookHatena
  • 公開:2021-11-24
  • 更新:2024-11-12
  • 文章量:3567
  • Python

TL;DR

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

スクレイピング

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: Requests モジュールの使い方(スクレイピング、データ収集など)