PHP, извлекать данные между HTML тегами с одинаковыми именами - PullRequest
0 голосов
/ 01 августа 2020

У меня есть страница HTML, на которой я хочу извлечь данные между ее тегами.

<div>
    <h2>Google</h2>
    <a href="google.com/about">Google is search engine</a>
    <a href="google.com">www.google.com</a>
</div>
<div>
    <h2>Amazon</h2>
    <a href="amazon.com/about">Amazon is shopping cart</a>
    <a href="amazon.com">www.amazon.com</a>
</div>
<div>
    <h2>Yahoo</h2>
    <a href="yahoo.com/about">Yahoo is websites directory</a>
    <a href="yahoo.com">www.yahoo.com</a>
</div>

И я хочу использовать этот чистый PHP код:

<?php
$html = file_get_contents("demo.html");
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName('a'); 
$nodes = $dom->getElementsByTagName('h2');
foreach ($nodes as $node) {
    echo $node->nodeValue."<br>";
} ?>

Как можно извлечь такие данные:

Google      Google is search engine     www.google.com
Amazon      Amazon is shopping cart     www.yahoo.com
Yahoo       Yahho is websites directory www.yahoo.com

Спасибо.

1 Ответ

0 голосов
/ 01 августа 2020

Предполагая, что вы можете идентифицировать этот конкретный блок данных, поскольку это предполагает, что вы просто просматриваете каждый тег <div> и одно и то же содержимое для каждого из них.

Он просто использует getElementsByTagName() в различных уровней для выборки данных, с тегами <a>, предполагается наличие 2 тегов, поэтому для получения данных от каждого из них используются [0] и [1].

$nodes = $dom->getElementsByTagName('div');
foreach ($nodes as $node) {
    echo $node->getElementsByTagName('h2')[0]->nodeValue."/";
    $a = $node->getElementsByTagName('a');
    echo $a[0]->nodeValue."/";
    echo $a[1]->nodeValue."<br>";
}

что с образцом дает .. .

Google/Google is search engine/www.google.com<br>
Amazon/Amazon is shopping cart/www.amazon.com<br>
Yahoo/Yahoo is websites directory/www.yahoo.com<br>
...