【php】simple_html_domで要素の次の要素を取得する方法
はじめに
やりたかったのはスクレイピングで以下のように取得したいタグにclassもidもついていない場合で。
わかることはh3のタイトルの中身は同じでその後ろにtableがあってこのtableの中身を取得したかった
・・・ <h3>表のタイトルです</h3> <table> <tr><th>ID</th><th>名前</th></th> <tr><td>1</td><td>太郎</td></th> <tr><td>2</td><td>花子</td></th> </table> ・・・
実装
で、調べているとnext_siblingというまさにやりたい関数がありました
$target = array(
"表のタイトルです",
・・・
);
// 対象のh3を取得
$h3List = $dom->find("h3");
foreach ($h3List as $k => $v) {
if (!in_array($v->plaintext, $target)) {
unset($h3List[$k]);
}
}
$h3List = array_values($h3List);
if (!empty($h3List)) {
$table = $h3List[0]->next_sibling(); // ★ココで次の要素を取得
foreach ($table->children as $k => $tr) {
foreach ($tr->find("td") as $td) {
// $td->plaintextで各項目の値が取得できる
}
}
}知っていれば簡単なんだろうけど、すごい便利でした
以上です