読者です 読者をやめる 読者になる 読者になる

【php】simple_html_domで要素の次の要素を取得する方法

php

はじめに

やりたかったのはスクレイピングで以下のように取得したいタグに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で各項目の値が取得できる
        }
    }
}

知っていれば簡単なんだろうけど、すごい便利でした

以上です