Задать вопрос
@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);
}

?>
  • Вопрос задан
  • 214 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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 выражений внутри браузера.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
IT ATLAS Москва
от 250 000 до 500 000 ₽