shucreamTech

web系エンジニアが意識低く書くブログ

PHP7でWebページをスクレイピング(Goutte)

やりたいこと

\PHP(7.0)でWebページをスクレイピングしたい/

ライブラリ選定

どれもjQueryっぽく扱えるらしい。 出来ることに大差は無いだろうし、GithubのStarの多さと最終アップデート日時などを考慮して、Goutte を使ってみることにした。

インストール

composer本体がインストールされている前提。

$ php composer.phar require fabpot/goutte

使うぞ!

試しにjqueryのドキュメントページをスクレイピングしてみる。

use Goutte\Client;

$client = new Client();
$crawler = $client->request('GET', 'http://api.jquery.com/');
$html = $crawler->html();
echo $html; // htmlを全部表示

簡単。便利。

フィルターも使ってみる。 ドキュメントページのメソッド名だけを抽出したい時は

$crawler->filter('article.post h1.entry-title a')->each(function ($node) {
    echo $node->text() . "\n";
});

で、

.add()
.addBack()
.addClass()
...

と表示されるハズ。

もっと使いたい

クローラのメソッドは http://api.symfony.com/3.0/Symfony/Component/DomCrawler/Crawler.html にまとまっている。

感想

スクレイピングという用途ではadd系はあまり使うことは無さそう。
jQueryライクではあるけども、例えば特定の要素の親要素を取得する時に .closest('セレクタ') ではなく .parents()filter('セレクタ') の組み合わせを使うことになるなど、微妙に使い勝手は異なる。
とりあえずサクッと使ってみた感じでは、凄く簡単だし良さそうだと思った。 むしろ簡単過ぎて大して意味のないエントリになってしまったけど、まぁPHP7でも動いたよ記念に残しておくことにします。