萬九郎の硬い船

プログラミング学習記録など

例外に備えさせていただく

本の中で、スクレイピング対象のデータフォーマットがひどかったりしてスクレイパーがエラーを起こして止まったときなどに、

Webサイトを作った開発者の名前を(それからおかしなフォーマットも)呪いたくもなるでしょうが、本当に腹が立つのは、そもそもそのような例外的なことを予想していなかった自分自身に対してです。

という記述があった。そもそもブラウザによるアクセスではなくスクレイピングでデータを取得しようとしているのだから、エラーの責任はこちら側にあるのだ。「させていただく」という姿勢がこの場合にはふさわしい。 もはやurlopenの段階から、ページや場合によってはサーバそのものが見つからなかったときのエラーに備えるため

from urllib.request import urlopen
from urllib.error import HTTPError
from urllib.error import URLError

try:
    html = urlopen("http://xxxxxxxxxx")
except HTTPError as e:
    print(e)
except URLError as e:
    print("サーバが見つからねえよ!")
else:
    print("させていただく")

という風に配慮して書く必要があり、ページ内のデータフォーマットがひどい場合に備えて、まずタグの存在チェックをした方がいいという(Pythonの例外処理についてはドキュメントを参照)。 「そこからデータが必ず取れる保証などない」ことを常に心しておくべし、ということである。