LoginSignup
8
9

More than 5 years have passed since last update.

PHPとGoutteでスクレイピング

Posted at

使う機会があったのでまとめてみます。
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だったり依存しているライブラリが入っています。

使ってみる

  1. vendor/autoload.phpをrequireする
  2. Clientを作る
  3. ページにアクセスしてCrawlerを作る
  4. 目的の要素を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がきれいな構造になることを祈ります。。。

参考

自分は単一ページのスクレイピング用途でしか使っていませんが、クローラーとしてももちろん使えます。

8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9