Goutte(グットゥ)を利用するとウェブサイトから手軽に情報を抽出することができます。ここではGoutteの基本的な使い方について紹介します。
目次
インストール
Composerを利用してGoutteをインストールします。
利用例
Goutteの利用例です。
// インストールしたパッケージを読み込んでいます。環境に合わせて指定してください。
require_once(realpath(__DIR__) . "/../../../../../composer_pj1/vendor/autoload.php");
// URLを指定して、Web情報を取得
$client = new Goutte\Client();
$crawler = $client->request('GET', '対象のurlを指定します');
// CSS セレクタで要素を指定し、データ抽出など行います。
$crawler->filter('.xxx tr')->each(function($node) {
echo "<dt>" . $node->filter('th')->text() . "</dt><br>";
echo "<dd>" . $node->filter('td')->text() . "</dd><br>";
});
豆知識
POST指定
$client->request('POST', 'http://xxxxx', ['key1' => 'val1'], ['key2' => 'val2']);
対象ノードの絞り込み
メソッド | 概要 |
---|---|
filter(“cssセレクタ”) | CSSセレクタで対象ノードを指定 |
eq(index) | インデックスで対象ノードを指定 |
parents() | 親ノードを指定 |
children() | 子ノードを指定 |
first() | 最初のノードを指定 |
last() | 最後のノードを指定 |
siblings() | 兄弟ノードを指定 |
nextAll() | 兄弟ノード(後)を指定 |
previousAll() | 兄弟ノード(前)を指定 |
下記のように、メソッドチェーンで絞り込むことができます。
echo $crawler->filter('.nav')
->first()
->filter('a')
->text();
データ抽出方法
// テキスト抽出
echo $crawler->filter('.reload a')->text();
// 属性抽出
echo $crawler->filter('.reload a')->attr("href");
// html抽出
echo $crawler->filter('.reload')->html();
任意のCSSセレクタの要素が存在するか判定
$node = $crawler->filter('.reload a');
if (count($node)) {
// 存在する場合の処理
}
ユーザーエージェントを設定
$client = new Client();
$client->setHeader('User-Agent', 'XXXXXXXXXX');
ページ遷移
// テキストリンクをクリック
$link = $crawler->selectLink("手動更新")->link();
$crawler = $client->click($link);
// 前のページへ戻る
$client->back();
// 次のページへ進む
$client->forward();
複数要素がヒットした場合
$crawler->filter('.list a')->each(function ($node) {
// 処理
}
// 値を渡したい場合
$xxx = 50;
$crawler->filter('.list a')->each(function ($node) use ($xxx) {
// 処理
}
// 値を受け取りたい場合
$xxx;
$crawler->filter('.list a')->each(function ($node) use (&$xxx) {
// 処理
}