PHP Simple HTML DOM Parserではまる- 拾えない属性が

 HTMLをパースするライブラリがある。それを使ってて非常に困る状況に陥ったのだけど、実際はカンタンな原因だったという話。
 PHP Simple HTML DOM Parserはてなブックマーク - PHP Simple HTML DOM Parser
 このライブラリのすばらしいところはなんといっても、jQueryのようにセレクターでDOMの要素の指定とかができる点(言葉の使いかたが正しいかどうかはちょっとわからない)。
 JavaScriptでjQueryを使い始めて、「なんでPHPはこんなふうにカンタンにできないんだ!」と思っていた自分にはとっても便利で合理的なものに思えたものです。それまでは正規表現使ったり(面倒!)、Dapper使ったり(不安定!)、Yahoo! Pipes使ってみたりいろいろやってのですが(そう、スクレイピングですよ、やってのは)、もうこれ以外は使えないと思ったのでした。
 そういえば、phpQueryってのを使ったこともあったのですが、なぜかやめました。その原因はもう思い出せません。まあ、それは今回関係無いです。
 で、PHP Simple HTML DOM Parserでうまいこと属性が拾えないという現象が発生。何度ソースを見てもそれは存在するのに!
 で、悩むこと数時間。
 よく見たら見逃しがあった(そりゃそうだ)。対象となるHTMLがちょっとおかしかったのだった。その例はこういうやつ。
<a target=”_blank”class=”sample” href=”htttp://example.com/” target=”_blank”>ほにゃらら</a>
 このaタグ自体は拾える。しかし、href属性の内容が拾えない。ほかのは? と思って調べる。targetは拾える。classは拾えない。なぜだ?
 もう一度よくソースを見る。
 classの前にあるべき空白がない。このせいで、target以外(以降というべきか)の属性が拾えないのだった。
 IEの開発ツールでDOMを見てもわからないはずだ。
 ということで、今後同様のことがあったときのためにメモ。
 


 あっ、基本的な使いかたとかは以下を参照ください。

コメント

  1. タナカ より:

    大変勉強になります。
    view-source:https://info-zero.jp/index.php?catecd=13#book_list

    このサイトのリンクとタイトルをスクレイピングしようとおもってもできません。
    ソースを見ても???何が原因なのでしょうか?
    aタグのURLはスクレイピングできますが、
    なぜか、タイトルがスクレイピングできないのです。。。。ブランクになってしまいます。
    原因がわかれば、是非教えてください。