使用PHP中的DOMDocument从另一个站点获取div

时间:2013-03-28 15:46:10

标签: php domdocument

我正试图从我的另一个网站获取div。我试过这个,但它不起作用:

<?php
$page = file_get_contents('http://lemans.net.pl/wroclaw');

$doc = new DOMDocument();
$doc->loadHTML($page);
$div = $doc->getElementByID('part');
     echo $div->nodeValue;
?> 

1 个答案:

答案 0 :(得分:1)

我对DOMDocument很好奇,所以我进行了一些实验。我编写了以下演示程序来说明一些可能对您有帮助的关键概念:

<?php
$page = file_get_contents('http://lemans.net.pl/wroclaw');

$doc = new DOMDocument();
$doc->loadHTML($page);

$doc->validateOnParse = true;

$div = $doc->getElementById('part');

echo "<br>------------------------------------------------------------<br>";
echo $tag = $div->hasChildNodes()?" hasChildNodes":" hasNoChildNodes";
echo "<br>------------------------------------------------------------<br>";
echo $div->tagName;
echo "<br>------------------------------------------------------------<br>";
$elements = $div->getElementsByTagName('*');
echo $elements->length;
echo "<br>------------------------------------------------------------<br>";
foreach ($elements as $node) {
  echo $node->tagName . " - href: " . $node->getAttribute('href') . "<br>";
}
echo "<br>------------------------------------------------------------<br>";
echo htmlspecialchars($doc->saveHTML($div));
echo "<br>------------------------------------------------------------<br>";
echo $doc->saveHTML($div);
echo "<br>------------------------------------------------------------<br>";
?> 

您可以尝试PHP小提琴:http://phpfiddle.org/main/code/8hf-nrk(点击“运行”按钮...)

一些解释和说明

(1)当您加载文档时,您可能会看到警告列表,其中一些警告与未正确编码的特殊字符相关,或者与混淆解析器的嵌套标签相关。

(2)validateOnParse选项似乎没有什么区别,但我把它放在以防万一。

(3)从文档中获取存储在$div中的节点后,您现在可以使用一个DOM片段。您可以执行tagName之类的操作,查看是否hasChildNodes等等。顺便说一下,nodeValue为NULL或为空,因为div中没有​​内容,只是子元素。

(4)您可以使用getElementsByTagName获取所有子节点的列表。请参阅列出标记名称和其中一个属性的foreach循环。

(5)如果您想要回显div及其子内容,请使用saveHTML。 您可以通过htmlspecialchars传递原始代码,也可以插入 div直接进入文档流程并显示活动链接和徽标图像。

我认为这应该会帮助你。祝你好运!