php - 使用 DOMXPath 查询 table
php - Query a table with DOMXPath
我尝试用php
表达式DOMXPath::query访问网页上table的值。当我使用网络浏览器浏览此页面时,我可以看到 table,但当我执行查询时,此 table 不可见且似乎不可访问。
这个 table 有一个 ID,但是当我在查询中指定它时,会返回另一个 ID。我想阅读 ID 为 'totals' 的 table,但我只有 ID 为 '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;
?>
如何读取 table 中 ID 为 'totals' 的元素?
完整路径是/html/body/div[@id="wrap"]/div[@id="content"]/div[@id="all_totals"]/div[@class="table_outer_container"]/div[@id="div_totals"]/table[@id="totals"]
您可以将查询分为两部分:首先,检索正确 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) ;
我尝试用php
表达式DOMXPath::query访问网页上table的值。当我使用网络浏览器浏览此页面时,我可以看到 table,但当我执行查询时,此 table 不可见且似乎不可访问。
这个 table 有一个 ID,但是当我在查询中指定它时,会返回另一个 ID。我想阅读 ID 为 'totals' 的 table,但我只有 ID 为 '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;
?>
如何读取 table 中 ID 为 'totals' 的元素?
完整路径是/html/body/div[@id="wrap"]/div[@id="content"]/div[@id="all_totals"]/div[@class="table_outer_container"]/div[@id="div_totals"]/table[@id="totals"]
您可以将查询分为两部分:首先,检索正确 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) ;