使う機会があったのでまとめてみます。
Goutte
まずはComposerのインストールから
GoutteをインストールするにはComposerを使います。
手順はこちら
自分はMacを使っているのでbrewでグローバルにインストールします。
$ brew tap josegonzalez/homebrew-php
$ brew install josegonzalez/php/composer
$ composer -V
Composer version 1.2.4 2016-12-06 22:00:51
Goutteをインストール
Composerでインストールします。簡単ですね。
$ composer require fabpot/goutte
完了するとvendorというディレクトリができます。この中にGoutteだったり依存しているライブラリが入っています。
使ってみる
- vendor/autoload.phpをrequireする
- Clientを作る
- ページにアクセスしてCrawlerを作る
- 目的の要素をfilterで絞って何かする
<?php
// 1
require_once './vendor/autoload.php';
// 2
$cli = new Goutte\Client();
// 3
$url = '対象ページのURL';
$crawler = $cli->request('GET', $url);
// 4
$title = $crawler->filter('div.article > div#body > h1')->text(); // タイトルを取得
$crawler->filter('table > tr > td')->each(function($td){
echo $td->text()."\n"; // テーブルのtd要素のテキストを出力する
});
filterの引数にはCSSセレクタを指定します。
CSS3のセレクタ全42種 まとめておさらい使い方リファレンス
Crawlerについては以下がわかりやすいです。
Webスクレイピングが捗るGoutteを使ってみる
見た感じ配列のユーティリティクラスを継承してるようですね。
クローラーオブジェクトの役割はデータ抽出の作業者でよさそうです。
eq, attr, text, html, extract, selectLink, selectButton, link, links, form あたり覚えておけば良さそうです。
配列操作だと each, first, last, filter, contains, count あたりはよく使いそうですね。
大体使うのは引用の通りです。
後は対象のHTMLとにらめっこして、ほしい要素がどうやったら指定できるか考えるだけ!
おわりに
あまり他のスクレイピングライブラリを使ったことないですが、Goutteは導入も使うのもそんなに苦労しませんでした。
どちらかと言うとスクレイピングするページのHTMLが汚くて苦労することが多いです。世の中のHTMLがきれいな構造になることを祈ります。。。
参考
自分は単一ページのスクレイピング用途でしか使っていませんが、クローラーとしてももちろん使えます。