ruby - 使用 Mechanize 和 nokogiri 使用正确的 xpath 抓取页面

标签 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> 包括在内?
执行此操作的正确代码是什么?

最佳答案

您可以使用 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/

相关文章:

ruby - 在 ubuntu 中安装 ruby​​-bundler 和更新 header 的困难

ruby - 如何在我的 git hook 目录之外进行 cd

ruby - nokogiri 可以在保存 xml 时对属性使用单引号吗?

ruby - Nokogiri:删除所有不在特定标签内包含字符串的节点

Windows 中带有环境变量的 Ruby 系统调用

ruby-on-rails - 在 rails 4 中重构一个大的 routes.rb 文件

python - 如何使用 Beautifulsoup4 抓取属性中未指定类或 id 的 HTML 元素

internet-explorer - IE 11 的内存泄漏,而 Google Chrome 不会发生

python - 使用xpath提取图像

ruby - XPath 查找所有后续 sibling ,直到特定类型的下一个 sibling