Requestsを使ってサイトにアクセスした際、サイトによってはエンコード情報を適切に判定してくれない場合があるようです。例えば下記のような場合、 SHIFT_JIS が欲しいところで ISO-8859-1 が返ってきます。
In [1]: import requests
In [2]: r = requests.get("http://www.atmarkit.co.jp/")
In [3]: r.encoding
Out[3]: 'ISO-8859-1'
このブログにアクセスした場合はこのようになります。これは正しく返してくれます。
In [4]: r = requests.get("http://blog.aoshiman.org")
In [5]: r.encoding
Out[5]: 'utf-8'
ちゃんと調べてはいないのですが、レスポンスヘッダに文字コード情報が入っていない場合に ISO-8859-1 を返すのかもしれません。とりあえず、正確な文字情報が欲しい場合は apparent_encoding を使うのがいいようです。
In [6]: r = requests.get("http://www.atmarkit.co.jp/")
In [7]: r.encoding
Out[7]: 'ISO-8859-1'
In [8]: r.encoding = r.apparent_encoding
In [9]: r.encoding
Out[9]: 'SHIFT_JIS'
ドキュメントには詳しく書いてないのですが、ソースコードを見てみると、 apparent_encoding はchardetを呼び出しているようです。
requests/models.py at bd3cf95e34aa49c8d764c899672048df107e0d70 · kennethreitz/requests
便利なのですが、やはり処理に時間がかかりますね。決まったところに何度もアクセスするのであれば、最初に調べてあとは決め打ちしたほうが良さそうです。
参考
Python3でrequests使っても日本語文字化けしないようにするには - TPDN launch pad