使用Mechanize和nokogiri在正确的xpath中抓取页面

时间:2015-06-06 11:08:25

标签: ruby web-scraping nokogiri mechanize

我正在尝试访问表中包含的数据,该表本身包含在class ='L1'的表中。 所以基本上我的html结构是这样的:

<table class="L1">
  <table>
    <tr></tr>
    <tr>
      <td></td>
      <td><a href="">data</a></td>
    </tr>
    <tr>
      <td></td>
      <td><a href="">data</a></td>
    </tr>
    ...ect...ect
  </table>
</table>

我需要捕获<a> </a>中包含的所有<tr> </tr>中包含的数据,但只能从表的第二个<tr>开始。

到目前为止,我提出了这个问题:

html_body = Nokogiri::HTML(body)
links = html_body.css('.L1').xpath("//table/tbody/tr/td[2]/a[1]")

但在我看来,这并不表示我想在第二个<tr>(第二个<tr>包括在内之后才开始这个事实? 什么是正确的代码来做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用position()选择所需的后续元素。

html_body = Nokogiri::HTML(body)
links = html_body.css('.L1').xpath("//table/tbody/tr[position()>1]/td[2]/a[1]")

正如对该SO答案的评论所述,请记住XPath从1开始计算,因此>1会跳过第一个tr