【问题标题】:Parsing div elements with Nokogiri使用 Nokogiri 解析 div 元素
【发布时间】:2014-04-29 05:23:46
【问题描述】:

以下代码成功提取tid和term数据:

(Uri Agassi 慷慨地回答)

for i in (1..10)
  doc = Nokogiri::HTML(open("http://somewebsite.com/#{i}/"))
  tids =  doc.xpath("//div[contains(concat(' ', @class, ' '),' thing ')]").collect {|node|    node['data-thing-id']}
  terms = doc.xpath("//div[contains(concat(' ', @class, ' '),' col_a ')]").collect {|node| node.text.strip }

  tids.zip(terms).each do |tid, term|
    puts tid+" "+term
  end
end

来自以下示例 html:

<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>

如果我想以同样的方式提取状态(“7 天内”字符串)信息,那么最好的方法是什么?我好像搞不懂。

有人能详细解释一下 tids 和 terms assignment lines 的实际作用吗?我不明白,Nokogiri 文档似乎没有涵盖这一点。

非常感谢。

~克里斯

【问题讨论】:

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


    【解决方案1】:

    我只想在 nokogiri 中使用 CSS 选择器。这样的事情应该可以工作。

    doc = Nokogiri::HTML(open("http://somewebsite.com/#{i}/"))
    seven_days = doc.css('status').content
    

    【讨论】:

    • 谢谢,但它是说 .content 方法未定义:在&lt;main&gt;': undefined method content' for []:Nokogiri::XML::NodeSet (NoMethodError)
    • @user1117603 选择器错误,应该是“.status”。这将返回所有匹配节点的匹配。所以最后一行应该是 seven_days = doc.css('.status').first.contentseven_days = doc.at_css('.status').content 如果你只需要匹配选择器的第一个节点。
    • @Pafjo 谢谢,但我仍然遇到同样的错误:./scrape_next_rep.rb:15:in &lt;main&gt;': undefined method content' for nil:NilClass (NoMethodError)
    • @Pafjo 知道为什么puts doc.at_css('div.col_a &gt; div.text').text 有效而puts doc.at_css('div.thing &gt; div.thinguser &gt; div.status').text 无效吗?
    • @user1117603 这很奇怪!当我与您一起尝试示例 html 时,这两个示例都适用于我。我正在使用 Ruby 1.9.2p318、Nokogiri 1.6.1 和 libxml2 在 2.9.1_0。您是从文件中读取内容还是通过网络读取内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多