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)