php - запрос к таблице с помощью DOMXPath - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь получить доступ к значениям таблицы на веб-странице с помощью php выражения DOMXPath :: query . Когда я перемещаюсь с помощью моего веб-браузера на этой странице, я вижу эту таблицу, но когда я выполняю свой запрос, эта таблица не видна и кажется недоступной.

У этой таблицы есть идентификатор, но когда я указываю его в своем запросе, возвращается другой. Я хочу прочитать таблицу с идентификатором 'totalals', но у меня есть только та, которая имеет идентификатор 'per_game'. Когда я проверяю код страницы, кажется, что в комментариях много элементов.

Вот мой сценарий:

<?php
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->strictErrorChecking = false;
$doc->recover = true;
$doc->loadHTMLFile('https://www.basketball-reference.com/players/j/jokicni01.html');
$xpath = new DOMXPath($doc);
$table = $xpath->query("//div[@id='totals']")->item(0);
$elem = $doc->saveXML($table);
echo $elem;
?>

Как я могу читать элементы в таблице с идентификатором 'totalals' ?

Полный путь: /html/body/div[@id="wrap"]/div[@id="content"]/div[@id="all_totals"]/div[@class="table_outer_container"]/div[@id="div_totals"]/table[@id="totals"]

1 Ответ

1 голос
/ 26 апреля 2020

Вы можете разделить ваш запрос на две части: сначала получите комментарий в правильном div, а затем создайте новый документ с этим содержимым, чтобы получить нужный элемент:

$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
$doc->strictErrorChecking = false;
$doc->recover = true;
@$doc->loadHTMLFile('https://www.basketball-reference.com/players/j/jokicni01.html');
$xpath = new DOMXPath($doc);

// retrieve the comment section in 'all_totals' div
$all_totals_element = $xpath->query('/html/body/div[@id="wrap"]/div[@id="content"]/div[@id="all_totals"]/comment()')->item(0);
$all_totals_table = $doc->saveXML($all_totals_element);

// strip comment tags to keep the content inside
$all_totals_table = substr($all_totals_table, strpos($all_totals_table, '<!--') + strlen('<!--'));
$all_totals_table = substr($all_totals_table, 0, strpos($all_totals_table, '-->'));

// create a new Document with the content of the comment
$tableDoc = new DOMDocument ;
$tableDoc->loadHTML($all_totals_table);
$xpath = new DOMXPath($tableDoc);

// second part of the query
$totals = $xpath->query('/div[@class="table_outer_container"]/div[@id="div_totals"]/table[@id="totals"]')->item(0);

echo $tableDoc->saveXML($totals) ;
...