Help us understand the problem. What is going on with this article?

Requests の使い方 (Python Library)

More than 5 years have passed since last update.

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)

sqrtxx
bitstar
インフルエンサーの広告マッチングサービスBitStarとマーケティングツールInfluencer Power Rankingを開発するベンチャー
https://corp.bitstar.tokyo/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした