Python Tips: Requests ライブラリのレスポンスボディの文字化けを解消したい

シンプルで使いやすい Python の HTTP リクエスト用ライブラリ Requests を使っているときに文字化けを解消する方法をご紹介します。

import requests

URL = 'https://www.1101.com/home.html'

r = requests.get(URL)

if r.status_code == 200:
    print(r.text.encode('utf-8'))  # => 文字化けしたテキスト

    # 文字化けの原因はエンコーディング
    print(r.encoding)  # => 'ISO-8859-1'

    # エンコーディングを変更すると
    # 自動で文字化けが解消されたテキストが取得できるようになる
    # エンコード utf-8 の部分は状況に応じて変更すれば OK
    r.encoding = 'Shift_JIS'
    print(r.text.encode('utf-8'))

気をつけるべきポイントとしては、 requests の Response オブジェクトのプロパティ text は unicode にデコードされている形がデフォルトという点です。 Python 2.7 の場合( Python 3 の場合は未確認です )、 HTTP レスポンスの生のボディを格納した content プロパティは str 型であるため、このあたりのちがいに注意が必要です。

import requests

URL = 'https://www.1101.com/home.html'

if r.status_code == 200:
    r = requests.get(URL)
    print(type(r.text))  # => unicode
    print(type(r.content))  # => str

参考