563

この記事は最終更新日から5年以上が経過しています。

@sqrtxx

Requests の使い方 (Python Library)

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)

563
ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
sqrtxx
bitstar
インフルエンサーの広告マッチングサービスBitStarとマーケティングツールInfluencer Power Rankingを開発するベンチャー

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
Trend Micro Cloud One を使ってAWS環境をよりセキュアにする方法について投稿しよう!
~
Docker上のみでシステムを作るときの構成
~