5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

urlfetch.fetchで取得したcontentの文字コード

Posted at

urlfetch.fetch(url)でGETしたレスポンスを.contentすると文字化けしていて日本語でスクレイピングできない。そんなときどうするか?

  1. contentの文字コードを特定する。
  2. urlfeth.fetchのheadersを指定する。
  3. unicodeにdecodeする。

文字コードの特定

ChromeでURLを開いてConsole -> Networks -> Response HeaderでContent-Typeを確認。
image.png

headersの指定

Content-Typeをそのままコピペ(当然、クォーテーションは自分で入れる)。上の場合の文字コードはEUC-JPだった。

import urlfetch

response = urlfetch.fetch(
    url=url,
    headers={'Content-Type': 'text/html; charset=EUC-JP'})

decodeする

この場合、response.contentの文字コードはEUC-JPなのでunicodeにデコードすればスクレイピングがうまくいく。

raw_html = response.content  # このままだとEUC-JP
raw_html = response.content.decode('euc-jp')  # これでunicodeになる。

Encode, Decodeについてようやく理解した

.encode, .decodeの引数にunicodeが出てくることはない。つまり、文字コードはunicodeを中継して変換することになる(ということにして理解した)。

encodeはunicodeを引数の文字コードにする。
unicode -> utf-8 : text.encode('utf-8')
unicode -> euc-jp : text.encode('euc-jp')

decodeは引数の文字コードをunicodeにする。
utf-8 -> unicode : text.decode('utf-8')
euc-jp -> unicode : text.decode('euc-jp')

エンコードしたらstr('hogehoge')で、デコードしたらunicode(u'hogehoge')で文字列操作すれば良い。

参考

Pythonで日本語文字列 (UnicodeとUTF-8, Shift-JIS, EUC-JPなどの相互変換)

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?