抓取 multi div class php 并创建一个 table

Scrape multi div class php and create a table

如何抓取具有相同名称的 div class 的页面以及如何创建 html table? 这是页面代码:

<div class="date">20/11/2018</div>
<div class="time">12:00</div>
<div class="nation">Italy</div>

<div class="date">20/11/2020</div>
<div class="time">12:00</div>
<div class="nation">England</div>

<div class="date">20/11/2025</div>
<div class="time">13:00</div>
<div class="nation">Spain</div>

我想用抓取的数据创建一个 html table,例如:

DATE | TIME | NATION
X    | X    | X

每个 div class 名字。我只能抓取一个 div,这是我的代码,我想在 html 页面中为每个 div class 循环。看看我的代码没有 table 代码:

include("simple_html_dom.php");
$html = file_get_contents('https://test.test');
$dom = new DOMDocument();
$dom->loadHTML($html);
$finder = new DomXPath($dom);

$classname = "date";
$nodes = $finder->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]");
$data1 = $nodes{0}->nodeValue;

echo $data1;

假设您可以将所需元素的父节点作为目标,那么您可能会像这样实现您想要的目标。

与父节点

<?php
    $html="
    <div id='some_container_id'>
        <div class='date'>20/11/2018</div>
        <div class='time'>12:00</div>
        <div class='nation'>Italy</div>

        <div class='date'>20/11/2020</div>
        <div class='time'>12:00</div>
        <div class='nation'>England</div>

        <div class='date'>20/11/2025</div>
        <div class='time'>13:00</div>
        <div class='nation'>Spain</div>
    </div>";

    $dom = new DOMDocument;
    $dom->loadHTML( $html );
    $xp = new DOMXPath( $dom );

    $query = '//div[@id="some_container_id"]';
    $col=$xp->query( $query );

    if( $col && $col->length > 0 ){

        $arr=array();


        foreach( $col as $node ){
            $query=sprintf('div[@class="%s"]|div[@class="%s"]|div[@class="%s"]','date','time','nation');
            $nodes=$xp->query( $query, $node );
            if( $nodes->length > 0 ){
                foreach( $nodes as $item )$arr[]=$item->nodeValue;
            }
        }

        if( !empty( $arr ) ){
            $chunks=array_chunk( $arr, 3 );
        }

        echo '
        <table>
            <tr>
                <th>Date</th>
                <th>Time</th>
                <th>Nation</th>
            </tr>';

        foreach( $chunks as $chunk ){
            echo "
            <tr>
                <td>{$chunk[0]}</td>
                <td>{$chunk[1]}</td>
                <td>{$chunk[2]}</td>
            </tr>";
        }
        echo '
        </table>';
    }
?>

没有父节点

$dom = new DOMDocument;
$dom->loadHTML( $html );
$xp = new DOMXPath( $dom );


$query = sprintf('//div[ contains( @class,"%s" ) or contains( @class, "%s" ) or contains( @class, "%s" )  ]', 'date', 'time', 'nation' );
$col=$xp->query( $query );

if( $col && $col->length > 0 ){

    $arr=array();
    foreach( $col as $node ){
        $arr[]=$node->nodeValue;
    }

    if( !empty( $arr ) ){
        $chunks=array_chunk( $arr, 3 );
    }

    echo '
    <table>
        <tr>
            <th>Date</th>
            <th>Time</th>
            <th>Nation</th>
        </tr>';

    foreach( $chunks as $chunk ){
        echo "
        <tr>
            <td>{$chunk[0]}</td>
            <td>{$chunk[1]}</td>
            <td>{$chunk[2]}</td>
        </tr>";
    }
    echo '
    </table>';
}