Задать вопрос
@johnny19887

Почему не срабатывает XPath?

Нужно получить данные об арбитрах футбольного матча. В Google Chrome выражение срабатывает, а php ничего не находит. В чем может быть проблема?
<?php

libxml_use_internal_errors(true);

$doc = new DOMDocument();
$html = file_get_contents('https://premierliga.ru/match/match_14803.html');

$doc->loadHTML($html);

$xpath = new DOMXpath($doc);
$elem = $xpath->query('//*[@id="content"]/div/indexarea/div/div/div[3]/div[5]/table[6]/tbody/tr/td/p/a/text()');

foreach($elem as $e){
    var_dump($e);
}

?>
  • Вопрос задан
  • 175 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
glebovgin
@glebovgin
Full Stack Web Developer
Очень "хрупкий" xpath запрос. То что он отрабатывает в Хроме, не значит, что он ровно так же отрабатывает в DOMXpath.
Варианты:
1. каждый раз прогонять весь html через tidy и смотреть каким будет xpath запрос уже после него, его, соотвественно, и использовать
2. без tidy использовать более короткий запрос, а-ля:
//td[@class="official"]/p/a/text()
Это рабочий вариант, но, возможно, нужны еще данные, которые не только внутри ссылок, тут уже сами.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
alekciy
@alekciy
Вёбных дел мастер
Причина простая. В браузере DOM строит JavaScript. И этот DOM отличается от того, что строит PHP (потому что там нет исполнение JavaScript кода).

Решение простое - запускать хром в режиме headless, использовать webdriver протокол для выполнения XPath выражений внутри браузера.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы