Requests の使い方 (Python Library)

  • 232
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

TL;DR

  • Requests とは Python の 今風な HTTP ライブラリである.
  • requests.get('URL') で GET リクエストができる.
  • レスポンスに対して .text とすることで, レスポンスボディをテキスト形式で取得できる.

Requests とは

Python の HTTP ライブラリ.
Python には urllib2 というライブラリがあるが, 公式サイトに Requests is an Apache2 Licensed HTTP library, written in Python, for human beings. という説明がある通り, 人類にとって読みやすくコーディングできる.

導入

pip install requests

使い方

ライブラリのインポート

import requests

リクエスト

各種 HTTP メソッドに一対一対応するメソッドが用意されている.

# GET
requests.get('URL')
# POST
requests.post('URL')
# PUT
requests.put('URL')
# DELETE
requests.delete('URL')
# header の取得
requests.head('URL')

パラメータの付与

リクエストメソッドの引数に params=付与するパラメーターの hash で付与する.

>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.get('URL', params=payload)

カスタムヘッダー

GET リクエストで UA を指定するとき

>>> headers = {'User-Agent': 'Sample Header'}
>>> requests.get('URL', headers=headers)

POST リクエストで HTTP ヘッダーにデータを追加する時

>>> payload = {'send': 'data'}
>>> requests.post('URL', data=json.dumps(payload))

レスポンスの中身

text

返ってきたレスポンスボディをテキスト形式で取得. リクエストは自動的に unicode にデコードされている.

>>> r = requests.get('http://yahoo.com/')
>>> r.text
'<!DOCTYPE html>\n<html lang="en-US" class="dev-desktop uni-purple-border  bkt901 https  uni-dark-purple sasb-space" style="">\n<!-- m2 template  -->\n<head>\n    <meta http-equiv="Content-Type" ...

encoding

エンコーディング情報を取得

content

レスポンスボディをバイナリ形式で取得.

>>> import requests
>>> r = requests.get('http://www.fnal.gov/faw/designstandards/filesfordownload/FermiLogo_blue.gif')
>>> r.content

各種レスポンス毎の処理

画像

PIL の Image モジュール を使う.

>>> from PIL import Image
>>> from StringIO import StringIO
>>> r = requests.get('http://www.fnal.gov/faw/designstandards/filesfordownload/FermiLogo_blue.gif')
>>> i = Image.open(StringIO(r.content))

JSON

>>> requests.get('http://ci.nii.ac.jp/ncid/BB08796640.json').json()
{'@context': {'foaf': 'http://xmlns.com/foaf/0.1/', 'prism': 'http://prismstandard.org/namespaces/basic/2.0/', 'rdfs': 'http://www.w3.org/2000/01/rdf-schema#', 'owl': 'http://www.w3.org/2002/07/ ...

サンプル

requests_use.py
# -*- coding: utf-8 -*-

import doctest
import requests

def sample(query):
    """ requests sample that use qiita search api
    >>> 'title' in sample('python')
    True
    >>> 'totle' in sample('python')
    False
    """
    q = {'q':  query}
    r = requests.get('https://qiita.com/api/v1/search', params=q)
    return list(r.json()[0].keys())

if __name__ == "__main__":
    doctest.testmod()

References

team information: (housyu, 3cdc8fdc466a6315c030)