Symfony2の機能を利用した「Goutte」というWebスクレイピングライブラリがある。
https://github.com/fabpot/Goutte
Githubからダウンロードし、中の「goutte.phar」ファイルのみをサーバーに配置し、
読みこむだけで利用できる。
require_once 'goutte.phar';
$client = new Client();
$crawler = $client->request('GET', 'http://example.com');
echo $crawler->filter('#contents')->text(); //id="contents"内の文字列が出力される
HTMLのパースにはSymfonyのDomCrawlerコンポーネントを利用していて、
上記のようにCSSセレクタを用いて取得することができる。
Crawlerクラスのソースコードは以下で確認できる。
しばらくGoutteを使ってみたが、requestメソッドのHTMLパース時に
マルチバイト文字の扱いで次のようなエラーが発生した。
Error parsing body - doesn't seem to be a chunked message
最初は単純にphp-mbstringをインストールしてやることで解決したのだけど、
別のHTMLをパースする際にまた同様のエラーが発生してしまい、今度は原因がわからなかったので、
現在は結局Simple HTML DOM Parserなどと併用する形で使っている。