株式会社クイックのWebサービス開発blog

HAPPYなエンジニア&デザイナーのブログです

PHPで「隣接した要素」を取得できるスクレイピングライブラリ「phpQuery」

こんにちは。社内でスクレイピングを担当している五所です。

今回は、PHPスクレイピングライブラリ「phpQuery」の紹介をしたいと思います。

インストール

下記URLから「phpQuery-x.x.x.386-onefile.zip」をダウンロードし、解凍して出てきたファイルをPHPからrequireするだけです。

Downloads - phpquery - phpQuery - jQuery port to PHP - Google Project Hosting

ただ、僕が使ったバージョン0.9.5ではタイポがあり

PHP Notice:  Undefined variable: hltml in phpQuery-onefile.php on line 517

というエラーが出たので、phpQuery-onefile.phpの517行目にある$hltml$htmlに修正しました。

「phpQuery」で隣接した要素の取得

基本的な使い方は、下記のサイトを参考にさせて頂きました。感謝。

person-link.co.jp

僕が注目したのは、このライブラリで「隣接した要素(Adjacent Elements)」の取得ができることです。

「隣接した要素」とは、下記のようなテーブルで

項目名
会社名 株式会社クイック
住所 東京都港区赤坂

「株式会社クイック」は、jQuery風の書き方では

td:contains('会社名') + td

で取得できます。「会社名」の隣にあるtd要素ということですね。

「simple_html_dom」というライブラリではこの操作がうまくできませんでした。

phpQueryならできます。

おまけ

上記のことはRubyのgemのMechanizeでも難なくできます。

社内でRubyが使える環境だったり、これから環境構築を始めたりする場合はこちらの方がお勧めです。

postメソッドやproxy設定が全てMechanizeに集約されているので。