【问题标题】:How to get all html data between 2 div with rails Nokogiri gem如何使用rails Nokogiri gem获取2个div之间的所有html数据
【发布时间】:2021-10-27 21:35:24
【问题描述】:

我想尝试使用 Nokogiri gem 获取 2 个 div 之间的所有 html 数据:

例如:

<div class='job-details__divider'></div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__top-reason-to-join-us'>
...
</div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__paragraph'>
...
</div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__paragraph'>
...
</div>
<h2 class='job-details__second-title'>...</h2>
<div class='job-details__paragraph'>
...
</div>
<div class='jd-page__employer-overview'></div>

结果数据是 2 个类(job-details__divider 和 jd-page__employer-overview)之间的 html 代码 任何人都可以给我一个解决方案?谢谢!

【问题讨论】:

    标签: ruby-on-rails nokogiri


    【解决方案1】:

    这可以通过应用节点集交集的Kayessian method 来使用 Nokogiri 的 XPATH 1.0 支持来实现:

    $nodeset1[count(. | $nodeset2) = count($nodeset2)]
    

    在您的情况下,$nodeset1div[@class='jd-page__employer-overview'] 之前的所有兄弟姐妹,$nodeset2div[@class='job-details__divider'] 之后的所有兄弟姐妹。

    doc = Nokogiri::HTML.parse(html)
    
    # nodeset1: All nodes after div.jd-page__employer-overview
    nodeset1 = "//div[@class='jd-page__employer-overview']/preceding::node()"
    
    # nodeset2: All nodes following div.job-details__divider
    nodeset2 = "//div[@class='job-details__divider']/following::node()"
    
    intersection = doc.xpath("#{nodeset1}[count( . | #{nodeset2}) = count(#{nodeset2})]")
    
    puts intersection.to_html
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 2013-09-23
      • 1970-01-01
      • 2021-10-26
      相关资源
      最近更新 更多