【问题标题】:Get a Dom element from website using php使用 php 从网站获取 Dom 元素
【发布时间】:2017-07-29 17:09:27
【问题描述】:

大家好,我想从网站获取一个 HTML 节点以在我的网站上显示它,但我做不到。

这是我的代码。

$html = htmlentities(file_get_contents("http://stackoverflow.com/"));
$doc = new DOMDocument();
$doc->loadHTML($html);
$h1 = $doc->getElementsByTagName("title");
var_dump($h1);

这就是结果。

object(DOMNodeList)#2 (1) {
  ["length"]=>
  int(0)
}

请帮忙。 提前致谢。

【问题讨论】:

  • 你为什么在那里使用htmlentities()
  • 你绝对不应该打电话给htmlentitiesDOMDocument 期望您加载原始 HTML,而不是转换为实体的 HTML。
  • 因为这个代码 $doc = new DOMDocument(); $doc->loadHTML("http://stackoverflow.com/"); $h1 = $doc->getElementsByTagName("title")->item(0)->textContent; print_r($h1); 给了我 Null。

标签: php html curl dom domdocument


【解决方案1】:

在解析它之前,无需在 html 字符串上应用htmlentities。如果你这样做,所有尖括号都会被替换,解析器将不再找到任何标签。

也没有必要使用file_get_contents 来加载文件,因为DOMDocument 有办法做到这一点。

在您的评论中,您没有使用好的方法来加载带有 URL(而不是 HTML 字符串)的 HTML 文件。

DOMDocument 方法是 DOMDocument::loadHTMLFile 而不是 DOMDocument::loadHTML

$doc = new DOMDocument();
$doc->loadHTMLFile("http://stackoverflow.com/");
$h1 = $doc->getElementsByTagName("title")->item(0)->textContent;
echo $h1, PHP_EOL;

请注意,您可以在此方法之前使用libxml_use_internal_errors(true); 防止显示不同的警告。

【讨论】:

  • 非常感谢您能向我推荐任何文档或网站以了解有关此主题的更多信息吗?在 php 中获取网页内容的最佳方法是什么?!!!
猜你喜欢
  • 2020-02-04
  • 2016-10-20
  • 1970-01-01
  • 2022-12-05
  • 1970-01-01
  • 2014-11-24
  • 2022-01-17
  • 2023-03-18
  • 2016-04-09
相关资源
最近更新 更多