【发布时间】:2019-06-18 21:21:46
【问题描述】:
使用 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 不考虑
tbody。 -
你想要整行还是只想要行的第一个/td?
-
我认为您需要检查
TR是否只是单个TD和COLSPAN="2"。您希望将其包含在抓取中还是从抓取中排除? -
我再次更新了问题,请查看。 @Scuzzy