2014年9月29日
Webスクレイピングが捗るGoutteを使ってみる
シャワー後の水切りでヘドバンしてたら頸椎を痛めてしまいました。あれは絶対やめた方がいいです。と周囲に広めているたきゃはしです。急に本題ですが今回はPHPで簡単にできるWebスクレイピングをご紹介します。
◯ Webスクレイピングとは
Webサイトからデータを抽出するソフトウェア技術のことです。
RSSやWebAPIが公開されていないサイトからでもデー タ抽出が出来るようなイメージです。
早速クローラーの Goutte(グットゥ) を使って紹介していきたいと思います。
Goutte は Symfony や Twig、Pimple等の開発者として知られるFabienが手がける人気ライブラリです。
◯ インストール
php composer.phar require fabpot/goutte:~2.0
インストールが完了したら vendor/fabpot/goutte/composer.json を覗いてみます...
...
"require": {
"php": ">=5.4.0",
"symfony/browser-kit": "~2.1",
"symfony/css-selector": "~2.1",
"symfony/dom-crawler": "~2.1",
"guzzlehttp/guzzle": "4.*"
},
...
BrowserKit に Guzzle とくればどんな機能があるかなんとなく想像がつきますね。
話が逸れますが、使用するライブラリの依存コンポーネントを確認しておくことは大切かなと思います。
◯ 使ってみる
<?php
// first.php
require_once './vendor/autoload.php';
$client = new Goutte\Client();
$crawler = $client->request('GET', 'http://blog.asial.co.jp/');
// 抽出
$targetSelector = 'h2.lh1_2em'; // アシアルブログの見出しのセレクター
$crawler->filter($target)->each(function ($node) {
echo $node->text() . "\n";
});
~/Sites/prac/goutte php first.php
外部コンテンツをiframeサイズで拡大縮小させたり、固定幅コンテンツをウィンドウサイズでピッタリ表示させる方法
「Monaca for Hybridcast」CEATEC JAPAN 2014(2014/10/7-11開催)にて展示
お絵描きアプリと画像の保存処理の実装
PC/スマホでは無いWEBアプリ開発の話 -ハイブリッドキャスト編-
IllustratorでSVGファイルを保存してみました
iPhone6 PlusのPSDモックアップとAppleのフォント
Canvas Fingerprintingというトラッキング技術
HTML5プロフェッショナル認定試験のセ ミナー資料を公開します
弊社田中のコラム「エンタープライズHTML5とバックエンド─エンタープライズ×モバイルアプリ開発の最新動向」が公開されました
HTML5+CSS3+JSでネイティブGUIアプリが作れる、node-webkitを触ってみる
試しにアシアルブログの記事タイトルを抽出してみました。実質10行も書いてないです。
コードにしれっと出てきた $client と $crawler について確認してみたいと思います。
・$client Goutte\Client
Array
(
[0] => setClient
[1] => getClient
[2] => setHeader
[3] => removeHeader
[4] => setAuth
[5] => resetAuth
[6] => __construct
[7] => followRedirects
[8] => setMaxRedirects
[9] => insulate
[10] => setServerParameters
[11] => setServerParameter
[12] => getServerParameter
[13] => getHistory
[14] => getCookieJar
[15] => getCrawler
[16] => getInternalResponse
[17] => getResponse
[18] => getInternalRequest
[19] => getRequest
[20] => click
[21] => submit
[22] => request
[23] => back
[24] => forward
[25] => reload
[26] => followRedirect
[27] => restart
)
定義されているメソッドのほとんどがsetter&getterですね。
このオブジェクトの役割はブラウザもしくはページそのものみたいな感覚でいいかなと思います。
click, submit, request, back, forward, reload, restart あたり覚えておけば良さそうです。
・$crawler Symfony\Component\DomCrawler\Crawler
Array
(
[0] => __construct
[1] => clear
[2] => add
[3] =>