書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

スクレイピング/DOM操作をjQuery風に行う(phpQuery)

2014年7月29日

Webサイトから情報を抽出する「Webスクレイピング」や、HTML内の各要素にアクセス/操作する「DOM操作」を、phpQueryを使ってjQuery風に行う方法を説明する。書籍転載の1本目(書籍内の番号は「70」)。

WINGSプロジェクト 片渕 彼富
  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、技術評論社発行の書籍『PHPライブラリ&サンプル実践活用[厳選100]』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『PHPライブラリ&サンプル実践活用[厳選100]』の詳細や購入は技術評論社のサイト目次ページをご覧ください。

ご注意

 本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。

 Webスクレイピングとは、Webサイトから情報を抽出する技術のことです。Webサイトから天気情報を取得したり、価格情報を取得して比較したりする際に利用されます。DOM操作とは、HTML内の各要素にアクセスし、要素の値を操作することです。phpQueryを利用すると、スクレイピング/DOM操作をjQuery風に行うことができ、短いコードで高度な機能を手軽に利用することができます。

インストール

 phpQuery本家サイトからライブラリが1つのファイルにまとまったphpQuery-0.9.5.386-onefile.zip をダウンロードします。展開後、phpQuery-onefile.phpをinclude_pathに配置します。

jQuery風にスクレイピングする

 リスト70-1は、phpQueryを利用してjQuery風にスクレイピングする例です(図70-1)。サンプルでは、CodeZineのヘッダ部分に表示されている言語のリンクの一覧を取得しています。

PHP
require_once("phpQuery-onefile.php");
 
// 1 htmlを取得
$html = file_get_contents("http://codezine.jp/");
 
// 2 phpQueryのドキュメントオブジェクトを生成
$doc = phpQuery::newDocument($html);
 
// 3 title要素内のテキストを表示
echo $doc["title"]->text();
echo "<br><br>";
 
// 4 画面上部の言語一覧のリンクを表示する箇所div class="SecondMenu" の要素の下のul -> li要素を取得
foreach ($doc[".SecondMenu"]->find("ul")->find("li") as $li){
  // 5 li要素の中のa要素を取得
  $a = pq($li)->html();
  echo pq($a)->text() . "<br>"; // a要素の中のテキストを取得して表示
}
リスト70-1 html.php
図70-1 jQuery風にスクレイピングする

図70-1 jQuery風にスクレイピングする

 phpQueryのライブラリを読み込んだ後、スクレイピングするHTMLを用意します(1)。次にスクレイピングしたいhtmlの文字列をphpQueryで扱えるドキュメントオブジェクトに変換します(2)。ドキュメントオブジェクト内の要素には、jQueryと同様に要素名を指定してアクセスでき、要素が持つテキストノードをtext()メソッドで取得できます(3)。

 クラス属性から要素を取得する場合も、セレクタの指定、findメソッドでの要素の検索が可能です(4)。取得した要素をphpQueryのオブジェクトとして扱う場合は、pq関数を利用します(5)。pq関数は、要素レベルを扱うjQueryの$()に相当する関数で、jQueryと同じやり方でスクレイピングが可能です。

jQuery風にDOMを操作する

 リスト70-2は、phpQueryを利用してjQuery風にDOMを操作するしてHTMLを表示する例です。サンプルでは、ul -> li 要素でリストを生成しています。

PHP
require("phpQuery-onefile.php");
 
// 1 div要素を生成
$doc = phpQuery::newDocument("<div>");
 
// 2 ul要素を生成
$ul = pq("<ul>");
 
// 3 li要素を生成、テキスト、クラスを追加
$li1 = pq("<li>");
$li1->html("php");
$li1->addClass("black"); // 黒丸
$li2 = pq("<li>");
$li2->html("perl");
$li2->addClass("white"); // 白丸
$li3 = pq("<li>");
$li3->html("java");
$li3->addClass("num"); // 数字
 
// 4 ul要素にli要素を追加
$ul->append($li1);
$ul->append($li2);
$ul->append($li3);
 
// 5 div要素にul要素を追加
$doc["div"]->append($ul);
echo $doc; // 画面に表示
リスト70-2 list.php
図70-2 jQuery風にDOMを操作する

図70-2 jQuery風にDOMを操作する

 最初に、表示するHTMLのベースとなるphpQueryのドキュメントオブジェクトを生成します(1)。1で生成したドキュメントオブジェクトに追加する要素は、要素単位でpq関数を利用して生成します(2)。pq関数で生成した要素オブジェクトは、jQueryと同様のメソッドでテキストやCSSのクラスを追加することができます(3)。生成した要素を追加する際も、jQueryと同様にappendメソッドを利用します(4)。1で生成したドキュメントオブジェクトに生成した要素を追加して、echoメソッドで画面に表示します(5)。

※以下では、本稿の前後を合わせて5回分(第1回~第5回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

1. 【現在、表示中】≫ スクレイピング/DOM操作をjQuery風に行う(phpQuery)

Webサイトから情報を抽出する「Webスクレイピング」や、HTML内の各要素にアクセス/操作する「DOM操作」を、phpQueryを使ってjQuery風に行う方法を説明する。書籍転載の1本目(書籍内の番号は「70」)。

2. Webスクレイピングを行う(Goutte)

HTMLから必要なデータを抽出する「Webスクレイピング」を手軽に行えるライブラリ「Goutte」の基本的な使い方を説明する。書籍転載の2本目(書籍内の番号は「88」)。

3. MVCフレームワークを使ってアプリケーションを作成する(CakePHP)

PHPのMVCフレームワークとして人気のある「CakePHP」の基本的な使い方を説明する。書籍転載の3本目(書籍内の番号は「94」)。

4. CakePHPのモデルとビューを利用する

CakePHPのモデルを定義して、ビューと組み合わせる方法を説明。また、Formヘルパーを使って入力チェックなどを行う方法も解説する。書籍転載の4本目(書籍内の番号は「95」)。

5. 高速で軽量なフレームワークFuelPHPを使う

高度なWebアプリ開発に向いている、高速で軽量なフレームワーク「FuelPHP」の基本的な使い方を説明する。書籍転載の5本目(書籍内の番号は「96」)。

サイトからのお知らせ

Twitterでつぶやこう!


Build Insider賛同企業・団体

Build Insiderは、以下の企業・団体の支援を受けて活動しています(募集概要)。

ゴールドレベル

  • 日本マイクロソフト株式会社
  • グレープシティ株式会社