ここでは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);
少し応用をすれば画像ファイルも取り込むことができます。
