fc2ブログ

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の文字列の取り扱いはよくわかっていません。末尾のこちらに助けられました。

PYTHONIOENCODINGという環境変数を指定することで、ロケールによらずに使用するエンコード方式を固定できるとのこと。これを指定すれば、いちいちエンコードしなくて良さそう。

最終的に以下のようにcronに登録することで無事動くようになりました。

0-59/5 * * * * PYTHONIOENCODING=utf-8 python xxx.py >> error_log 2>&1

スポンサーサイト




Python@2017/10/14 14:10   | 0 comments | 0 trackbacks |

コメント

コメントの投稿


秘密にする

«  | HOME |  »

いろいろ作ったり

プロフィール

icot

Author:icot
総合電気メーカで働く会社員でしたがいい年にも関わらずコンサルに転職。お酒、ジョギング、音楽、本、料理をこよなく愛してます。ここでは、日々感じた事を書き連ねるとともに、いろいろ実験してみたりしてます。
icotfeels[at]gmail.com

これまでに感じたこと