XPATH获取特定列TD的标题TH

时间:2016-09-25 19:24:56

标签: xpath scrapy

我目前有一个具有以下布局的表

<table>
 <thead>
  <tr>
   <th>Header One</th>
   <th>Header Two</th>
   <th class="headerBorder">H</th>
   <th>Header Three</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>A</td>
   <td>B</td>
   <td class="border">H</td>
   <td>C</td>
  </tr>
  <tr>
   <td>D</td>
   <td>E</td>
   <td class="border">H</td>
   <td>F</td>
  </tr>
  <tr class="myRow">
   <td class="data">G</td>
   <td class="data">H</td>
   <td class="border">H</td>
   <td class="data">I</td>
  </tr>
 </tbody>
</table>

我正在提取行data中的列myRow

目前有x的这个..

//table//tr[@class="myRow"]/td[@class="data"]

这正确地返回了以下节点的数组。

<td class="data">G</td>

<td class="data">H</td>

<td class="data">I</td>

向我返回一个数组,我还需要返回它们与父<tr>相关的索引,以便我可以使用它并获取相应的标题。

很感激帮助!!

1 个答案:

答案 0 :(得分:1)

如果您引用其中一个td(假设您正在使用基于标记的scrapy),则可以使用XPath ..访问其父级:

td.xpath('..')

或者,您可以先选择所需的th,然后从那里选择td。这样您就可以轻松处理每个不同的th及其子级,而不必过滤掉重复项等。

for th in response.xpath('//table//tr[@class="myRow"]'):
    # do something with th
    for td in th.xpath('td[@class = "data"]'):
        # do something with td