Python の lxml.html でパースエラーの拾い方
苦戦したのでここにメモ。
Python の lxml.html で HTMLファイルをパースすると、パースし損なっていても例外を投げることなく、正常終了と区別がつかない形で処理が終わってしまうことがある。
調べたところ、
lxml.html.html_parser.error_log
にパース時のエラーがまとめて残されていることが分かった。
for log in lxml.html.html_parser.error_log:
print log
とかやると、出力することができる。
しかし残念なことに、世の中のHTML、ほとんどが何かしらのエラーを吐いてしまうので、エラーが出たからフォールバック処理などとやっていては、ほとんどがフォールバック処理に回ってしまう。
エラーの中身を精査して致命的かどうかを判断する必要がある。
自作のHTMLならともかく、スクレイピングとかやってるときは手の打ちようがない。
Python の lxml.html で HTMLファイルをパースすると、パースし損なっていても例外を投げることなく、正常終了と区別がつかない形で処理が終わってしまうことがある。
調べたところ、
lxml.html.html_parser.error_log
にパース時のエラーがまとめて残されていることが分かった。
for log in lxml.html.html_parser.error_log:
print log
とかやると、出力することができる。
しかし残念なことに、世の中のHTML、ほとんどが何かしらのエラーを吐いてしまうので、エラーが出たからフォールバック処理などとやっていては、ほとんどがフォールバック処理に回ってしまう。
エラーの中身を精査して致命的かどうかを判断する必要がある。
自作のHTMLならともかく、スクレイピングとかやってるときは手の打ちようがない。
この記事へのコメント