それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

php でHTMLをXpathする。php DomDocument();

PHPで、取得したHTMLをXpathして、構造を取得する。

php でも、XpathはSimpleXmlに存在するのだが、そのままロードすると面倒なので、Domにしておくと楽。

HTML→DOM→SimpleXml→Xpath

<?php
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xml = simplexml_import_dom($dom);
$a = $xml->xpath("//a")

こんな感じ。

xmlパーサー がinternal encoding (普通はutf-8) で解釈する。だから、取得HTMLの文字コードを統一しておく。ヤフオクとか未だにEUCのサイトに注意する。

nico_parse.php

ニコニコ動画で検索して、結果からリンクを取り出す。

<?php
$keyword = rawurlencode("にっこにこにー" );
$keyword = rawurldecode($keyword);
$html = file_get_contents("http://www.nicovideo.jp/search/${keyword}");


$dom = new DOMDocument();
@$dom->loadHTML($html);
$xml = simplexml_import_dom($dom);


$ret = $xml->xpath("//p[@class='itemTitle']/a");


foreach( $ret as $e  ){
    echo $e["href"];
    echo ",\t";
    echo $e;
    echo "\n";
} 

?>

new DomDocumentは結構便利で私も多用している。

DomDocument で便利そうなメソッド

  • DomDocument#getElementById
  • DomDocument#appendChild

DomDocumentが扱えるのだから、PHPの〇〇テンプレートエンジン的なものよりDOMから構築した方が確実なのでは。とおもったr

he DOMDocument class

2022-04-05

fix typo