GoutteTweetこんにちは、小川です。今回はPHP製のスクレイピングライブラリ「Goutte」を紹介します。Potencier氏です。Frameworkの一部のライブラリを利用しています。インストールを行います。GitHubのリポジトリをクローンします。http://github.com/fabpot/Goutte.git実際にスクレイピング処理を記述するscrape.phpを作成します。Goutteは単一のPharアーカイブにまとめられています。このPharアーカイブを読み込むだけでGoutteが利用可能です。読み込みはPHPファイルと同様、requireで行います。Manual)先ほどクローンしたGoutteディレクトリの直下にgoutte.pharがあるので、これを読み込みます。'/path/to/Goutte/goutte.phar';scrape.phpでgoutte.pharを読み込んだら、スクレイピングを行うためのGoutte\Clientクラスのオブジェクトを作成します。Goutte\ClientクラスはSymfony\Component\BrowserKit\Clientクラスの子クラスにあたります。Client();Goutte\Clientクラスのrequest()メソッドでWebページの情報を取得します。Symfony\Component\BrowserKit\ClientクラスはWebブラウザをエミュレーションするためのフレームワークとなっており、このクラス自体にリクエストを送信してレスポンスを取得する機能は実装されています。そこで、Goutte\Clientクラスの内部でZend\Http\Clientクラスを利用して実際にリクエストを送信しています。request()メソッドの戻り値はSymfony\Component\DomCrawler\Crawlerクラスのオブジェクトです。Symfony\Component\DomCrawler\CrawlerSymfony\Component\DomCrawler\CrawlerクラスはjQueryのようにCSSセレクタを用いてDOMにアクセスし、要素を取得することができます。トップに表示されている全ブログのタイトルを取得するのは次のようになります。シアルブログのトップに表示されている全ブログのタイトルを取得するのは次のようになります。"\n";});filter()メソッドにCSSセレクタを指定すると、マッチする要素を取得できます。filter()メソッドの戻り値は、フィルタリングされた要素を保持するSymfony\Component\DomCrawler\Crawlerオブジェクトになります。each()メソッドには無名関数(Closureオブジェクト)を指定します。無名関数に渡されたDOMNodeオブジェクトの値を取得しています($node->nodeValue)。実行結果は次のようになります。シーケンス図sshでポートフォワードもうすぐ健康診断があるんだ・・・これでスクレイピング完了です。ここまでやっておいてなんですが、今回伝えたかったことはGoutteの紹介ではありません。FrameworkのHttpClientを組み合わせただけです。結局のところGoutteとは、Symfony2の新たな使い方を示したライブラリといってもよいでしょう。1.xではFormやRoutingなど、symfonyの一部を「サブフレームワーク」とみなしていました。Components」として、より明確に抜き出されました。Doctrine2では、SymfonyのConsoleコンポーネントを用いてコマンドラインの機能を提供しています。FrameworkのLoggerなどを利用しているように、Symfony2の一部を他のフレームワークやライブラリから利用する、ということも今後増えていくでしょう。Componentsを部分的にリポジトリに含めています。Componentsを使ううえで、必ずしもSymfony2を別途インストールする必要はありません。仮に機能が多少古くても、ライブラリにとって十分であるならば常に最新バージョンに追随する必要もないでしょう。wheel)」という言葉があります。Frameworkの他にも、ORMにDoctrineやPropel、テスティングにPHPUnitを利用しています。既存ライブラリを活用する他にも、特定のライブラリを利用したいと思ったときに組み込みやすい仕組みにもなっています。テンプレートエンジンを抽象的に扱うTemplatingコンポーネントのおかげでTwigも簡単に組み込めます。特定の具象クラスに依存はせず、様々な箇所で"インターフェイス"に依存するようなつくりになっています。何といってもDIコンテナです。クラスの管理が非常にスマートに行えます。ここまでやったらもうJavaでいいじゃん!とか思ったりもしますが、環境構築の手軽さやvar_dump()の存在を考えるとやっぱりPHPって楽でいいですよね。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。