使用 XPath 进行网络抓取。
结构是:
<table>
<tbody>
<tr>
<th>
<td>
但是其中一个 tr 只包含一个 th 或一个 td。
<table>
<tbody>
<tr>
<th>
所以我只想抓取 TR
中是否包含两个标签。我给路径
$route = $path->query("//table[count(tr) > 1]//tr/th");
或
$route = $path->query("//table[count(tr) > 1]//tr/td");
但它不起作用。
我在这里给出了 orjinal 表的链接。第一张表的最后两个 TR 只有一个 TD。这就是问题所在。第二个或第三个表也有同样的问题。
https://www.daiwahouse.co.jp/mansion/kanto/tokyo/y35/gaiyo.html
$route = $path->query("//tr[count(*) >= 2]/th");
foreach ($route as $th){
$property[] = trim($th->nodeValue);
}
$route = $path->query("//tr[count(*) >= 2]/td");
foreach ($route as $td){
$value[] = trim($td->nodeValue);
}
我正在尝试同时选择 TH 和 TD。但是如果 TR 包含一个 TD 那么它就会引起问题。因为在 TD 计数和 TH 计数中我抓取的 TD 比 TH 多
最佳答案
这个 XPath,
//table[count(.//tr) > 1]/th
将选择所有 table
元素中具有多个 tr
后代的所有 th
元素(无论 tbody
存在)。
这个 XPath,
//tr[count(*) > 1]/*
将选择具有多个子元素的 tr
元素的所有子元素。
这个 XPath,
//tr[count(th) = count(td)]/*
将选择 tr
元素的所有子元素,其中 th
子元素的数量等于 td
子元素的数量。
OP 发布了该网站的链接。根元素位于 xmlns="http://www.w3.org/1999/xhtml"
命名空间中。
关于php - 基于 tr 计数的 td/th 的 XPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54358529/