Python2でcron使ってBeatifulSoupでスクレイピング処理したらハマった
のでメモ。
ターミナルからPython xxx.pyとやる分には問題なく動いていたのですが、cronに登録するとうまく動かない。問題がどこかを特定するのにもワタワタしてました。
まずは、cronでの実行時のログをきちんと見ようということで。こちらを参考にさせてもらってログ出力。
cron 実行時エラーに気づくポイント3つ - AWS / PHP / Python ちょいメモ
そしたら、初め疑っていたBeautifulSoupは悪くなくて、これまで何度か遭遇していた「UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12: ordinal not in range(128)」というもの。でも、何でだ、何が違うんだと色々調べていたらこちらにたどり着きました。
Python2で文字列を処理する際の心掛け - Qiita
でも、未だにPython2の文字列の取り扱いはよくわかっていません。末尾のこちらに助けられました。
最終的に以下のようにcronに登録することで無事動くようになりました。PYTHONIOENCODINGという環境変数を指定することで、ロケールによらずに使用するエンコード方式を固定できるとのこと。これを指定すれば、いちいちエンコードしなくて良さそう。
0-59/5 * * * * PYTHONIOENCODING=utf-8 python xxx.py >> error_log 2>&1
Python@2017/10/14 14:10
Tweet
| 0 comments | 0 trackbacks
| ↑