WindowsのPythonでUnicodeEncodeErrorが出た時の対処法

最近はVue.jsでクライアントサイドの開発もどきを行うことが多かったのですが、ある日主人から「Webサイトから○○のデータを取ってこい」と言われ、久しぶりにPythonを触ることになりました。

自分の昭和な泥臭い性格を考えるとコードを書くより地道にサイトからコピペしたほうが早いんじゃないの・・・と思いつつ、馬鹿にされるのも嫌なのでこちらの本を買ってスクレイピングなるものをやってみました。

Python2年生 データ分析のしくみ 体験してわかる! 会話でまなべる!

※スクレイピングの本はかなり難解なものが多いと思いますが、こちらは超初心者向けです。そういった方にはお勧めです!!

本がやさしかったため所定のサイトの情報を取得することはできたのですが、いざファイルに出力しようとしたところ、以下のようなエラーが発生しました。

UnicodeEncodeError: 'cp932' codec can't encode character '\xa0' in position 26: illegal multibyte sequence

えっと、、、取得した情報の文字コードがあっていないのかな・・・。知識がない自分にはその程度の予測しかできず、いつも通り主人は何も教えてくれないため近くの不親切な人間より遠くの親切な皆さんに頼るべくさっそくググってみました。

スポンサーリンク

親切な方のページには細かい説明が載っていたのですが、知識のない自分の頭では以下のように理解しました。

Pythonのstrの文字コードはUnicodeだけどWindowsの標準はCP932(Shift JIS)だから、ファイル出力の際に変換エラーになるらしい。一度byte型にして、その時にUnicode→CP932の変換でエラーになるものを無視するオプションを付けて実施し、その後strに戻すとうまくいく・・・らしい。※多分間違ってます・・・

よくわからないですが、やらないと何も進まないのでとりあえずやってみました。

before = teststr.encode('cp932', "ignore")
after = before.decode('cp932')

自分はteststrをファイルに書き込んだ所エラーになったため、上述のような変換を挟んだ後にafterをファイル出力してみたのですが、問題なく処理ができました!

一応これで主人から指示された作業は無事任務完了となりました。スクレイピング、結構面白いですね。もっといろいろ勉強してみようと思いました。

スポンサーリンク