【问题标题】:Extract this string using Nokogiri使用 Nokogiri 提取此字符串
【发布时间】:2014-04-30 05:19:39
【问题描述】:

使用 xpath 或 css,有人可以建议一种方法来提取此字符串:

“7 天内”

来自:

<div class="thing text-text" data-thing-id="29966403">
  <div class="thinguser"><i class="ico ico-water ico-blue"></i>
    <div class="status">in 7 days
    </div>
  </div>
  <div class="ignore-ui pull-right"><input type="check box" >
  </div>
  <div class="col_a col text">
    <div class="text">foobar
    </div>
  </div>
  <div class="col_b col text">
    <div class="text">foobar desc
    </div>
  </div>
</div>

chrome 的 xpath 如下所示:

 //*[@id="content"]/div/div/div[2]/div[4]/div[1]/div

提前谢谢你, 〜克里斯

【问题讨论】:

标签: html ruby-on-rails ruby xpath nokogiri


【解决方案1】:

使用at_css:

doc.at_css('div.thing > div.thinguser > div.status').text

【讨论】:

  • 谢谢,但我一直收到此错误:./scrape_next_rep.rb:16:in &lt;main&gt;': undefined method text' for nil:NilClass (NoMethodError)。如果您能指出正确的方向,我将不胜感激。
  • @user1117603 那是因为 CSS 选择器没有找到任何匹配的东西。确保 Nokogiri 正确加载文档并尝试重构 CSS 选择器。
  • 会的。我相信该文档已正确加载,因为我可以从中提取其他元素,例如 data-thing-id 和“foobar”(使用 xpath 获取这些元素)。由于某种原因,当我使用 doc.at_css 时它不起作用。再次感谢您。
  • @Aria-shaw 对 puts doc.at_css('div.col_a &gt; div.text').text 有效但 puts doc.at_css('div.thing &gt; div.thinguser &gt; div.status').text 无效感到困惑。
【解决方案2】:

替代解决方案:

require 'nokogiri'

html = %q{ 
  <html>
   <body>
    <div class="thing text-text" data-thing-id="29966403">
    <div class="thinguser"><i class="ico ico-water ico-blue"></i>
      <div class="status">in 7 days
      </div>
    </div>
    <div class="ignore-ui pull-right"><input type="check box" >
    </div>
    <div class="col_a col text">
      <div class="text">foobar
      </div>
    </div>
    <div class="col_b col text">
      <div class="text">foobar desc
      </div>
    </div>
   </div>
 </body>
</html>
}

doc = Nokogiri::XML(html)
status = doc.at_css('.status')

puts status.text

【讨论】:

    猜你喜欢
    • 2011-01-08
    • 2012-10-24
    • 2013-07-25
    • 1970-01-01
    • 2021-01-18
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多