【问题标题】:Nokogiri - How to select the attribute "value" from nokogiri page searchNokogiri - 如何从 nokogiri 页面搜索中选择属性“值”
【发布时间】:2016-02-09 13:33:47
【问题描述】:

我使用 Nokogiri 按 css 类搜索并收到此输出。我想从这个哈希中选择: value="E-Mail an application-.com" 但我不知道如何。这是哈希:

{"href"=>#<Nokogiri::XML::Attr:0x3fe935c500b8 name="href"   
value="http://.com">, "chars"=>#<Nokogiri::XML::Attr:0x3fe935c500a4    
name="chars" value="q|c|.|i|@|l|t|e|j|o|a|m|u|n|p">, "chars_index"=># 
<Nokogiri::XML::Attr:0x3fe935c50090 name="chars_index" 
value="10|14|14|5|3|1|10|6|3|9|13|4|8|12|13|3|0|7|2|1|9|11">, "title"=>#     
<Nokogiri::XML::Attr:0x3fe935c5007c name="title" value="E-Mail an 
application-.com">}

我尝试使用

来选择值
.select{|a| a['value']} 

但这不起作用。有人有什么想法吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow。 Nokogiri 文档和关于 SO 的问题很好地涵盖了这一点。询问时,我们需要最小的 HTML,而不是检查变量的输出。请阅读“How to Ask”和“minimal reproducible example”。

标签: ruby-on-rails ruby nokogiri


【解决方案1】:

http://ruby.bastardsbook.com/chapters/html-parsing/

上面的链接很好地介绍了这一点。

选择名称可能更容易: 即使用适当的 css 选择器后,您的最后一条语句将如下所示:

 page = Nokogiri::HTML(open(URL))

 page.css(//some selectors...[title="name"])

【讨论】:

  • 有趣的参考!
  • 这个方法对我不起作用,虽然我发现下面做了 page.css(".selector")[0]['title']
  • 您不想使用css 来尝试使用XPath。 Nokogiri 将(正确地)假设您正在传递 CSS 选择器。
【解决方案2】:

最简单的方法是在节点上使用#attribute

page.css(a_selector).map{ |node| node.attribute('value') }

【讨论】:

    【解决方案3】:

    如果要访问属性,请将节点视为哈希:

    require 'nokogiri'
    
    doc = Nokogiri::HTML('<a href="foo">bar</a>')
    doc.at('a')['href'] # => "foo"
    

    您会看到最常用的表示法。

    您也可以使用这些:

    doc.at('a').get_attribute('href') # => "foo"
    doc.at('a').attr('href')          # => "foo"
    

    这些都记录在Nokogiri's XML::Node documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 1970-01-01
      • 2012-07-21
      • 2012-10-15
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      相关资源
      最近更新 更多