studylog/北の雲

chainer/python/nlp

Requests(python)で文字化けする場合

RequestsはシンプルなHTTPライブラリですがよく文字化けします。Shift_JISのサイトだと多めな印象。

html = requests.get("http://Shift_JISのサイト")
print(html.encoding) #=> ISO-8859-1

なのでここを参考に
[Python]requestsが正しくエンコード情報を返してくれない場合は apparent_encoding を使うとよいかもしれない | aoshiman.org

html.encoding = html.apparent_encoding
print(html.encoding) #=> Shift_JIS

しかし元ブログにも書かれているように遅いです。
自分の環境だと130kbのhtmlソースで500ms程度かかっちゃいます…。

ちゃんと調べてはいないのですが、レスポンスヘッダに文字コード情報が入っていない場合に ISO-8859-1 を返すのかもしれません。
[Python]requestsが正しくエンコード情報を返してくれない場合は apparent_encoding を使うとよいかもしれない | aoshiman.org

とのことなので、レスポンスヘッダが空の時だけやるようにするとか、あるいはISO-8859-1を返して来た時だけにするとか工夫する必要がありそう。

こうやってどんどんと分岐処理が増えていってクローラーが肥大化していく。