我试图访问包含在表中的数据,该表本身包含在带有 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>
包括在内?执行此操作的正确代码是什么?
最佳答案
您可以使用 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
.
关于ruby - 使用 Mechanize 和 nokogiri 使用正确的 xpath 抓取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30682075/