【问题标题】:PHP DOMXpath not picking anything upPHP DOMXpath 没有拾取任何东西
【发布时间】:2012-04-18 08:23:24
【问题描述】:

我正在尝试编写一个脚本,从该网站获取第一张图片的 URL:http://www.slothradio.com/covers/?adv=&artist=pantera&album=vulgar+display+of+power

这是我的脚本:

$content = file_get_contents($url);
$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DOMXpath($doc);

$elements = $xpath->query("*/div[@class='album0']/img");
echo '<pre>';print_r($elements);exit;

当我运行它时,它会输出

DOMNodeList Object
(
)

即使我将查询更改为$xpath-&gt;query("*/img"),我仍然一无所获。我做错了什么?

【问题讨论】:

标签: php dom xpath web-scraping


【解决方案1】:

$doc-&gt;loadHTMLFile($content); 接受 FILE PATH 而不是 HTML 内容,请参阅文档

http://php.net/manual/en/domdocument.loadhtmlfile.php

使用

$doc = new DOMDocument();
$doc->loadHTMLFile($url);

输出元素使用

var_dump(iterator_to_array($elements)); 
//Or
print_r(iterator_to_array($elements));

谢谢

:)

【讨论】:

  • 好的,我将其更改为 loadHTML($content) 而不是 loadHTMLFile($content),并且我正在使用 iterator_to_array(),但我仍然一无所获。如果我只对 xpath 使用“*”,我会得到一个奇怪的数字。有什么想法吗?
  • 我不知道您要提取的 URL,但是 .. 刚刚在一个简单的 URL 上测试了代码,它工作正常
【解决方案2】:

我做错了什么?

您正在使用print_r,但DOMNodeList 不提供该函数的任何输出(因为它是一个内部类)。例如,您可以从输出项目数开始。最后你需要遍历节点列表并自己处理每个节点。

printf("Found %d element(s).\n", $elements->length);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2021-01-16
    • 2021-10-29
    • 2015-02-11
    相关资源
    最近更新 更多