如何通过URL从ID获取表?

时间:2015-11-16 04:14:51

标签: php html xpath domdocument

我试图通过它的ID从特定URL获取一个表。我的方法是从URL获取原始HTML,将其转换为PHP的可读DOM,然后通过查询查找表。

以下代码的结果是$elements始终为空(长度为0)。

<?php
    $c = curl_init('http://www.urlhere.com/');
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);

    $html = curl_exec($c);

    if (curl_error($c))
        die(curl_error($c));

    curl_close($c);

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

    $xpath = new DOMXpath($dom);

    $elements = $xpath->query("*/table[@id=anyid]");

    if (!is_null($elements)) {
        foreach ($elements as $element) {
            echo "<br/>[". $element->nodeName. "]";

            $nodes = $element->childNodes;
            foreach ($nodes as $node) {
                echo $node->nodeValue. "\n";
            }
        }
    }
?>

如何在我的页面上成功呈现此表?

修改

我想要获取的HTML片段,直接取自$html变量:

<div></div><table class=sortable id=anyid></table>

1 个答案:

答案 0 :(得分:1)

要继续评论,您可以先隐藏这些错误:

libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();

此讨论得到了彻底解决here

然后要应用它,只需将其添加到您的代码中:

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();

$xpath = new DOMXpath($dom);

$elements = $xpath->query("//table[@id='anyid']");

if (!is_null($elements)) {
  foreach ($elements as $element) {
    echo "<br/>[". $element->nodeName. "]";

    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "\n";
    }
  }
}

Sample Output