ここではhtml要素をjQueryのように取得してくれるPHP Simple HTML DOM Parserの紹介をしていきます。
PHP Simple HTML DOM Parserをダウンロード
http://simplehtmldom.sourceforge.net/
サンプルソース
<?php require_once('simple_html_dom.php'); // html読み込み $html = str_get_html('<html><body>Hello World</body></html>'); // URLから読み込み $html = file_get_html('http://example.com'); // ファイルから読み込み $html = file_get_html('sample.html'); // body内0番目のaタグ内を取得 $value = $html->find('body a', 0)->innertext; // body内0番目のaタグごと取得 $value = $html->find('body a', 0)->outertext; // body内0番目のaタグhref属性を取得 $value = $html->find('body a', 0)->href; // 全てのaタグを配列で取得 $data = $html->find('body a'); $value = $data[0]->innertext; // idやclassなどでも指定 $data = $html->find('#foo'); $data = $html->find('.bar'); // メモリリークを回避 $html->clear();
解説
$html = str_get_html(); (6行目)
htmlを読み込みます。
$html = file_get_html(‘http://example.com’); (9行目)
URLからも読み込めます。
$html = file_get_html(‘sample.html’); (12行目)
ファイルからも読み込めます。
$value = $html->find(‘body a’, 0)->innertext; (15行目)
findでjQueryのようにタグ内の要素を取得することが出来ます。
$value = $html->find(‘body a’, 0)->outertext; (18行目)
outertextとすることで、タグを含めた取得も出来ます。
$value = $html->find(‘body a’, 0)->href; (21行目)
hrefと指定することで、aタグ、href要素を指定することも出来ます。
$data = $html->find(‘body a’); (24行目)
->find(‘body a’);と指定することでaタグの要素を全て配列で取得することができます。
$data = $html->find(‘#foo’); (28、29行目)
idやclassなどのターゲットで指定することも出来ます。
$html->clear(); (32行目)
htmlを生成しすぎるとメモリリークに陥ってしまうので、コールしてください。
画像読み込みのサンプルソース
<?php require_once('simple_html_dom.php'); // URLから読み込み $html = file_get_html('http://example.com'); $value = $html->find('body img', 0)->src; $data = file_get_contents($value); file_put_contents('dl.jpg', $data);
少し応用をすれば画像ファイルも取り込むことができます。