PHPDay 4

PHP Simple HTML DOM Parserを使ったWebスクレイピング入門

More than 5 years have passed since last update.

さて、みなさん、Webページをスクレイピングとき、どんなライブラリを使っていますか?

以前に、遊びでスクレイピングサイトを作ろうと思った時に、「そういえばPHPでスクレイピングするときってどうやるんだろう?」と思って、色々と調べた結果、下のライブラリを使っていました。

PHP Simple HTML DOM Parser

基本的な使い方は上を見て貰えればわかりますが、ちょっとしたポイントをいくつか解説させて頂ければと思います。


PHP Advent Calenderからタイトル一覧とURLを取得する

例として、PHP Advent Calenderからタイトル一覧を取得してみましょう。

require_once("simple_html_dom.php");

$php_advent_calender_uri = "http://qiita.com/advent-calendar/2013/php";
$html = file_get_html($php_advent_calender_uri);

foreach ($html->find(".advent-calendar-item ") as $entry) {
$title = $entry->find(".comment", 0);
$user_url = $entry->find("a", 0)->href;
echo $title->plaintext . "\n";
echo $user_url . "\n";
}


解説

まず、関数file_get_htmlで、対象のhtmlを読み込み、findメソッドで、該当するタグか、あるいはjQueryのように、対応するclassのDomを取り出すことができます。また、find後の配列として収められているものも、同様にfindが使えます。さらに、配列で欲しいわけではなく、特定の順番のタグの情報が欲しい場合は、順番の数字を指定することも可能です。

そして、ソースを見て貰えればわかるように、個別のオブジェクトの属性として、plaintextという属性がついています。これは表示される文字列を、タグ無しで取り出してくることが可能になります。

個別の属性に関しては、plaintextのように、属性からアクセスすることが出来ます。例えば、aタグのURLが欲しければ、find("a", 0)->hrefといったようにアクセスすることが出来ます。


終わりに

複雑なURLをゴリゴリするのではなく、簡単に情報を集めたいというとき、手軽につかえるライブラリなので、使ってみるとちょっとだけサイト巡回が楽になるかもしれません。