在标头中转置html表的第一列

时间:2019-02-19 02:02:58

标签: php

我正在尝试在Borsa Italiana上刮一张桌子 我使用这段代码

<?php
    $url = "https://www.borsaitaliana.it/borsa/azioni/global-equity-market/dati-completi.html?isin=IT0001477402";
    $html = file_get_contents($url);
    libxml_use_internal_errors(true);
    $doc = new \DOMDocument();
    if($doc->loadHTML($html))
    {
        $result = new \DOMDocument();
        $result->formatOutput = true;
        $table = $result->appendChild($result->createElement("table"));
        $tbody = $table->appendChild($result->createElement("tbody"));

        $xpath = new \DOMXPath($doc);

        foreach($xpath->query("//table[@class=\"m-table -clear-m\"]/tbody/tr") as $row)
        {
            $newRow = $tbody->appendChild($result->createElement("tr"));

            foreach($xpath->query("./td[position()>0 and position()<3]", $row) as $cell)
            {
                $newRow->appendChild($result->createElement("td", trim($cell->nodeValue)));
            }
        }
	
    }
echo $result->saveHTML($result->documentElement);
    ?>

结果是一个具有两列和更多行的表。我将在标头中转置第一列,以便将结果保存在数据库中供个人使用。 谁能帮我? 谢谢

1 个答案:

答案 0 :(得分:0)

尝试一下:

<?php
$url = "https://www.borsaitaliana.it/borsa/azioni/global-equity-market/dati-completi.html?isin=IT0001477402";
$html = file_get_contents($url);
libxml_use_internal_errors(true);
$doc = new \DOMDocument();
if ($doc->loadHTML($html)) {
    $result = new \DOMDocument();
    $result->formatOutput = true;
    $xpath = new \DOMXPath($doc);
    // collects data in $arr -->
    $arr = [];
    foreach ($xpath->query("//table[@class=\"m-table -clear-m\"]/tbody/tr") as $row) {
        $itm = [];
        foreach ($xpath->query("./td[position()>0 and position()<3]", $row) as $cell) {
            $itm[] = trim($cell->nodeValue);
        }
        $arr[] = $itm;
    }
    // <--
    $table = $result->appendChild($result->createElement("table"));
    // outputs head -->
    $thead = $table->appendChild($result->createElement("thead"));
    $newRow = $thead->appendChild($result->createElement("tr"));
    foreach (array_column($arr, 0) as $th) {
        $newRow->appendChild($result->createElement("th", $th));
    }
    // <--
    // outputs data -->
    $tbody = $table->appendChild($result->createElement("tbody"));
    $newRow = $tbody->appendChild($result->createElement("tr"));
    foreach ($arr as $row) {
        $newRow->appendChild($result->createElement("td", isset($row[1])? $row[1]: ""));
    }
    // <--
}
echo $result->saveHTML($result->documentElement);

但是我同意@tim-为此,您必须使用API