如何使用Xpath从具有特定标题的表中获取行

时间:2019-01-11 16:32:25

标签: xpath web-scraping

我需要获取HTML表中的所有行:

//html
<div class="container">
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
    <div class="box"></div>
</div>


//js
const BOXES = document.querySelectorAll('.box');
let turn = true;
let opened = [1, 1, 1, 1, 1, 1, 1, 1, 1];
let x = [];
let o = [];

for (let i = 0; i < BOXES.length; i++) {
    BOXES[i].addEventListener('click', () => {
        if (turn == true && opened[i] == 1) {
            BOXES[i].innerHTML = "<p>X</p>";
            x.push(i);
            x.sort();
        }
        if (turn == false && opened[i] == 1) {
            BOXES[i].innerHTML = "<p>O</p>";
            o.push(i);
            o.sort();
        }
        opened[i] = 0;
        turn = !turn
    })
} 

由于页面中有很多表,我想从该特定表中获取行。

这是我的Xpath:

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Location</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Dunkin Donuts</td><td>2 York Ave</td>
    </tr>
  </tbody>
</table>

我也尝试过:

table[tr/th/text()="Location"]//tr

不返回任何元素。关于如何使它起作用的想法?

1 个答案:

答案 0 :(得分:0)

也许您的上下文节点没有table子节点。您可以通过全局选择table的所有//table元素来解决此问题。您也没有考虑theadtbody元素。这样做将导致以下XPath表达式:

//table[thead/tr/th/text()="Location"]/tbody/tr