以前、スクレイピングに関してはこのエントリーでも紹介したとおり、phpに標準で入っているDOMDocumentを使う方法が一番楽です。
ところがデータによってはXMLで解析するため目的とする要素を取得するのがなかなか大変でした。備考欄のように文字数が多く、htmlも含まれているtext形式のデータが格納されているデータを取得することがうまくできなかったのです。
今回もっと楽に取得できる方法がないかと思い、phpQueryを使ってみました。
このライブラリを使うとjQueryで要素を取得するように目的の要素を取得、抽出できます。
Contents
インストール
https://code.google.com/archive/p/phpquery/downloads
↑ここからダウンロードしてきて、require_onceでファイルを読み込めばOKです。(1ファイルしかありません。)
基本的な使用方法
対象となるHTMLを読み込み、下記のようにセレクタでしていてあげればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$html = file_get_contents ( $url ); $dom = phpQuery::newDocument( $html ); //下記のように非常に簡単に要素を取得できます。 $name = $dom['div.target_name']->text(); //ちなみに複数の要素が取得される場合は下記のようにします $eles = $dom['div.prop']; foreach( $eles as $ele){ //pq()としないとphpQueryでのメソッドが使用できません。 //要素をfindで取得してそのあとの要素はtext,html,attrなどで抽出します。 $target_prop = pq($ele)->find('a')->attr('href'); echo $target_prop; } |
さらにいろいろな使用法を知りたい場合は下記リンクを参考にしてみましょう。