使用带有DOMDocument的复杂xpath获取img src

时间:2017-02-01 15:20:18

标签: php xpath

我希望有一个函数来返回图像的src。应该通过xpath选择图像,该路径应传递给函数:

function getImgUrl($html, $xpath) {
    $xpathkram = new DOMXPath(@DOMDocument::loadHTML($html));

    $src = $xpathkram->evaluate('string(' . $xpath . '@src)');
    return $src; 
}
$xpath = '//*[@id="watch7-sidebar-modules"]/div[1]/div/div[2]/ul/li/div[2]/a/span/img';
$html = file_get_contents("https://www.youtube.com/watch?v=LNBjMRvOB5M";

echo getImgUrl($html, $xpath));

但由于某种原因,它拒绝工作并在第4行中陈述DOMXPath::evaluate(): Invalid expression

2 个答案:

答案 0 :(得分:0)

您在代码中有一些语法错误:在file_get_contents("https://www.youtube.com/watch?v=LNBjMRvOB5M";之后错过右括号,而在echo getImgUrl($html, $xpath));处有两个括号而不是一个括号。

答案 1 :(得分:0)

首先将$ spath查询中的attribure'src'添加为'/ @ src':

$xpath = '//*[@id="watch7-sidebar-modules"]/div[1]/div/div[2]/ul/li/div[2]/a/span/img/@src';

你的错误在这里:

$src = $xpathkram->evaluate('string(' . $xpath . '@src)');

你应该写:

$src = $xpathkram->evaluate( $xpath );

结果是你收到的将是DOMNodeList对象。从中获取文本:

$list = getImgUrl($html, $xpath);

foreach ($list as $item){
    var_dump($item->textContent);
}