民芸的プログラミング 〜ソフトウェア開発日記〜

アクセスカウンタ

zoom RSS PythonのhtmlパーサとWEBブラウザのパーサの違い

<<   作成日時 : 2014/07/18 11:22   >>

ブログ気持玉 0 / トラックバック 0 / コメント 2

動物園・水族館のWEBサイトの更新情報のニュースサイトを作成している。

ここで、Pythonで書いた自作スクレイパーを使用しているのだが、中にはひどい構造のWEBサイトがあって、うまくデータを取得できていない。
そこで、動作速度の関係からまずはlxmlで読んでみて、それでうまくいかなかった場合のみbeautifulsopuで読み直すという処理になっている。

しかし、現実にはそのサイトはChromeを使えば何の問題もなく閲覧できているように見える。
その違いについて、ざっと調べたところ、以下のサイトが参考になった。

ブラウザの仕組み: 最新ウェブブラウザの内部構造

間違った入れ子構造や、間違ったbodyタグ、htmlタグの閉じがあった場合に、Webkitがどう動作するか詳しく解説されている。
簡単にエラーにするのではなく、寛容に解釈して処理を進めるようになっている。

lxmlはこういった場合、エラーを吐きつつ、そこで解析をストップさせてしまうので、結果がWebkitと異なって当然ということになる。

WEBサイトを作っている側は、IEだけか、頑張っているところでもFireFoxとChrome、Safariでの確認ぐらいしかしていないだろう。いちいちhtmllintで確認していたら、こんなに文法的にひどいサイトだらけになるはずがない。
というわけで、このWebkitの動作に関する資料はとても役に立つ。

具体的にlxmlでどうすればいいのかまでは、すぐには分からないが。

とりあえずこれで問題の解決に向けて一歩前進したといところだろうか。

テーマ

関連テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(2件)

内 容 ニックネーム/日時
http://lxml.de/parsing.html#parsing-html
http://lxml.de/lxmlhtml.html#parsing-html
lxml.etree.HTMLParserは辿ってみるとlibxml2のHTMLParser.cに行き着くようです。

2014/07/28 15:49
ご丁寧な解析ありがとうございます。
結局、libxml2のパーサーが厳密すぎて、世の中の一般的なブラウザ(IE,Firefox,Chrome,Safari)が許容するHTMLであっても、lxmlでは許容されないってことが起こってしまうってことなんですよね。
kazuyoshikakihara
2014/07/28 21:06

コメントする help

ニックネーム
本 文
PythonのhtmlパーサとWEBブラウザのパーサの違い 民芸的プログラミング 〜ソフトウェア開発日記〜/BIGLOBEウェブリブログ
文字サイズ:       閉じる