urlfetch.fetchで取得したcontentの文字コード
urlfetch.fetch(url)
でGETしたレスポンスを.content
すると文字化けしていて日本語でスクレイピングできない。そんなときどうするか?
- contentの文字コードを特定する。
- urlfeth.fetchのheadersを指定する。
- unicodeにdecodeする。
文字コードの特定
ChromeでURLを開いてConsole -> Networks -> Response HeaderでContent-Typeを確認。
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')で文字列操作すれば良い。
参考
Author And Source
この問題について(urlfetch.fetchで取得したcontentの文字コード), 我々は、より多くの情報をここで見つけました https://qiita.com/yousuke_yamaguchi/items/a27c935c0d129c30ba07著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .