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
2022-04-05
fix typo