Получение img src с помощью сложного xpath с DOMDocument

77
8

Я хотел бы иметь функцию для возврата 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));

Однако по какой-то причине он отказывается работать и указывает DOMXPath::evaluate(): Invalid expression в строке четыре.

спросил(а) 2021-01-27T18:22:53+03:00 4 месяца, 3 недели назад
1
Решение
116

Сначала добавьте атрибут 'src' в $ xpath query как '/@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);
}

ответил(а) 2021-01-27T18:22:53+03:00 4 месяца, 3 недели назад
45

У вас есть некоторые синтаксические ошибки в коде: пропущенная закрывающая скобка после file_get_contents("https://www.youtube.com/watch?v=LNBjMRvOB5M"; и два скобки вместо одного здесь echo getImgUrl($html, $xpath)); ,

ответил(а) 2021-01-27T18:22:53+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема