【问题标题】:How do I parse this HTML using Nokogiri?如何使用 Nokogiri 解析此 HTML?
【发布时间】:2013-04-19 04:04:27
【问题描述】:

基于此 HTML:

<li><strong><a href="http://www.ukasta.org.uk/">United Kingdom Agricultural Supply Trade Association</a> (UKASTA)</strong></li>

我想获取United Kingdom Agricultural Supply TradeAssociation(UKASTA) 字符串。

使用 Nokogiri,我写道:

linklist=link.parent.parent.css('li strong a')
linklist.each do |f|
  puts f.text
end

f.text是“英国农业供应贸易协会”, 但是我如何获得“(UKASTA)”?

【问题讨论】:

    标签: ruby html-parsing nokogiri


    【解决方案1】:

    你潜得太深了。我会使用:

    require 'nokogiri'
    
    html = '<li><strong><a href="http://www.ukasta.org.uk/">United Kingdom Agricultural Supply Trade Association</a> (UKASTA)</strong></li>'
    doc = Nokogiri::HTML(html)
    doc.at('strong').text
    

    返回:

    "United Kingdom Agricultural Supply Trade Association (UKASTA)"
    

    如果您必须找到&lt;a&gt; 节点,您可以使用以下命令访问“(UKASTA)”:

    a_node = doc.at('a')
    a_node.text
    => "United Kingdom Agricultural Supply Trade Association"
    a_node.next_sibling.text
    => " (UKASTA)"
    

    【讨论】:

      【解决方案2】:

      您可以使用children方法,然后通过位置识别数据:

      require 'nokogiri'
      
      html_doc = Nokogiri::HTML("<html><li><strong><a href="">United Kingdom Agricultural Supply Trade Association</a>(UKASTA)</strong></li></html>")
      
      html_doc.css('li strong').children[0].text
      => United Kingdom Agricultural Supply Trade Association
      html_doc.css('li strong').children[1]
      => (UKASTA)
      

      【讨论】:

      • 注意,如果你想把它组合成一个字符串,你也可以通过html_doc.css('li strong').text得到United Kingdom Agricultural Supply Trade Association (UKASTA)
      • .css('li strong').children[0] 是获取所需节点的一种尴尬方式。 css 返回一个类似于数组的 NodeSet。然后你说children,这将是另一个数组,然后[0] 得到第一个元素。请改用at 而不是css。它将访问器的第一次出现作为节点返回,因此它很好地短路了.css('li strong').children[0]
      猜你喜欢
      • 2013-04-27
      • 2013-08-15
      • 2011-01-04
      • 2013-04-02
      • 2011-09-08
      • 2011-11-16
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多