PHPでHTMLを扱うときに便利なのがSimple HTML DOM Parserと言うライブラリ。
HTMLが正しい構造ならば、PHP標準のXML機能で扱えるんだけど、世の中、正しくないHTML文書の方が多いので、パースで転けるけど、このライブラリを使うとブラウザのように上手く理解してくれるので、簡単に扱うことが出来る。
file_get_html(url)でHTMLをパースしたオブジェクトを得て、そのオブジェクトに対してfind(タグ名)メソッドや、children(要素番号)メソッドでタグを分割できる。
require_once(‘simple_html_dom.php’);
$URL = ‘http://vps.xn--ockc3f5a.com/’;if($html = file_get_html($URL)){
$linka = array();
$links = array();
foreach($html->find(‘a’) as $el){
$linka[md5($el->href)]++;
$links[md5($el->href)] = $el->href;
}
arsort($linka);
foreach($linka as $k=>$n){
echo("<li>{$links[$k]} [{$n}リンク]</li>");
}
}else{
echo(‘HTMLの取得に失敗しました’);
}
この場合、全てのaタグを探索して、そのhref要素についてカウントしている。
正規表現を使って^http[s]{0,1}:\/\/で切り分けてやれば、相対リンクと絶対リンクの切り分けが出来るだろう。
更に、絶対リンクを^http:\/\/vps.xn--ockc3f5a.com\/で切り分けると内部リンクと外部リンクに分けられる。
CでHTMLをパースする場合は、こちらの記事が参考になる。
(239)