[PHP] PHP Simple HTML DOM Parserでスクレイピング

Webスクレイピングとは、WebサイトのHTMLデータを取得し、特定のデータを抽出し、整形することを言います。ウェブに掲載されているデータを1個1個コピペで取得する作業は大変です。このような時にスクレイピングが役に立ちます。

今回は「PHP Simple HTML DOM Parser」というライブラリを使ったスクレイピングの方法を紹介します。

ウェブスクレイピングとは

ウェブスクレイピングはwikipediaによると以下のように説明されています。

ウェブスクレイピング

ウェブスクレイピング(Webscraping)とは、ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと。

ウェブ・クローラー(Web crawler) あるいはウェブ・スパイダー(Web spider)とも呼ばれる。

通常このようなソフトウェアプログラムは低レベルのHTTP(Hypertext Transfer Protocol)を実装することで、もしくはInternet ExplorerまたはMozilla FirefoxなどのWebブラウザを埋め込むことによって、人間によるWWWのブラウジングをシミュレートする。

引用:ウェブスクレイピング | wikipedia

PHP Simple HTML DOM Parser利用の準備

PHP Simple HTML DOM Parser – Browse Files at SourceForge.netからライブラリをダウンロードします。

適当なディレクトリに「simple_html_dom.php」をアップロードしてから、require_once(‘/パス/simple_html_dom.php’)で読み込んで利用します。

CakePHPで利用する方法はこのページの下部に記載しておきます。

PHP Simple HTML DOM Parserの使い方

URLからデータを読み込んで使う場合は下記のように記載します。
「file_get_html」を使います。

実験用にHTMLソースを変数に入れて指定しました。
このときは「file_get_html」ではなく「str_get_html」を使うので注意してください。

このプログラムではソース内にあるaタグの中にあるURLだけが表示されます。

CSSセレクタを利用して抽出

例:指定したidに含まれる要素の中からaタグにあるURLを抽出

ここでは id が SampleB の要素の中のURLを抽出しているので、サンプルサイトBの中のURLだけが表示されます。
$html->find(‘#SampleB a’)という形でCSSのセレクタを指定できるのがいいですね。本当に簡単に抽出できてしまいます。

セレクタ指定方法

class属性がtestの要素を取得
$sample= $html>find( ‘.test’ );

img要素を取得
$sample= $html>find( ‘.img’ );

title属性のあるa要素を取得
$sample= $html>find( ‘a[title]’ );

ul要素内に含まれる li要素を取得
$sample= $html>find( ‘ul li’ );

class属性がsampleのtableに含まれる th要素を取得
$sample= $html>find( ‘table.sample th’ );

Domからの読み出し

hrefを取得
$element>href

srcを取得
$element>src

altを取得
$element>alt

テキストを取得
$element>plaintext

CakePHPでの利用方法

CakePHP2で「PHP Simple HTML DOM Parser」を利用するときはダウンロードしてきたファイルの中にある「simple_html_dom.php」を/App/Vender/内にコピーします。

あとは利用したいコントローラなどで
App::import(‘Vendor’, ‘simple_html_dom’);
と記載して読み込めば利用できます。

※他人のウェブには著作権がありますので、スクレイピングしたデータを勝手に利用はできません。

環境:CakePHP2.5.6



Author: webmaster