GoutteでWebスクレイピング


2016年7月20日

オリックスがやっと勝てるようになってきて少し嬉しい、はち です。

突然ですが

Webスクレイピングに興味を持ちました

大きな・有名なWebサイトであれば、ある程度のAPIが用意されているので、色々と情報を取得するのは簡単ですが、
中規模・小規模のWebサイト、WebシステムではAPIは中々用意されていないというが現状ではないでしょうか。
そのような、APIが用意されていないWebサイトから、なんとかデータを引っこ抜いてくる何かがないものかと考えました。
単純にURLを指定して「表示されたWebページにさえ欲しい情報があれば」HTMLを引っこ抜いてきて自力のルーチンで解析するのも勿論1つの手段です。
そのような動きは、Webクローラー(検索エンジンなどで採用されているものです)と同じような動きになると思いますが
それを手軽に実現できる「Goutte」と「PHPQuery」という2つのWebスクレイピングライブラリがあることを知りました。
※Webスクレイピングとは、検索エンジンなどで使用しているWebクローラーのように、Webサイトから情報を抽出する仕組みのことです。

PHP5.3でGoutteを使う

PHP5.3でGoutteを使う場合、Goutteのバージョンが1.x系のものを使えば一応は遊べます。
json形式のものをインストールしたり、色々使用方法はあるのですが、今回はパッケージがまとまっているphar形式のものを使います。

Goutteの動作要件について補足

>Goutte depends on PHP 5.5+ and Guzzle 6+.
>If you need support for PHP 5.4 or Guzzle 4-5, use Goutte 2.x.
>If you need support for PHP 5.3 or Guzzle 3, use Goutte 1.x.
最新のGoutteを使うにはPHP5.5以上、Guzzle(HTTPクライアントライブラリ)のVer6以上が必要です。
このサイトのサーバーはPHP5.2系を採用しているので、残念ながら当サーバー上で試験することは出来ません。
ので、別のサーバー(PHP5.3系実装)でGoutteを用いたWebスクレイピングをテストすることとしました。
最新のものは色々機能が追加されていたり不具合が修正されていたりするそうです。

Goutteライブラリを用意します

https://github.com/FriendsOfPHP/Goutte ページ内にある「Installation」から少し下にある
>The phars for Goutte 1.x are also available for download
>http://get.sensiolabs.org/goutte-v1.0.7.phar
↑これがGoutte1.x系のものです。これを使えばPHP5.3でもGoutteが利用できます。

実装サンプル

せっかくなので、オリックスの成績表をスクレイピングして見ようと思います。
取得して配列に入れ込むだけなら、なんとたったの15行で済みます(コメント除く)。すごいですね。

完成

元ページhttp://baseball.yahoo.co.jp/npb/teams/11/memberlist?type=b
20150626_001 元ページの表を取得・解析し、独自のグリッドを3つ追加しました。(残規定到達打席数、1試合の平均打席数、規定打席に残り何試合今のペースで出ればよいか)
本当は、動作しているものをサンプルとして用意したかったのですが、このサーバーでは用意できないのでローカルにあるサーバーで実装しました。
他のサイトとも連動して色々野球関係の物を作るのもよし、もっと実用的なAPIに変わる物を作るのも良し、ですね。

PHP, 開発言語

Posted by はち