【问题标题】:Trying to extract attribute values using Nokogiri with custom pseudoclass CSS selectors尝试使用带有自定义伪类 CSS 选择器的 Nokogiri 提取属性值
【发布时间】:2012-12-21 10:20:44
【问题描述】:

加载了 (X)HTML 页面后,我正在尝试获取元标记的“内容”属性的值。例如,给定:

<meta name="author" content="John Smith" />

我想提取值“John Smith”。

我知道如何使用 XPath 来做到这一点,并且知道 CSS 主要用于元素选择,但 Nokogiri 支持定义 custom CSS pseudoclasses,我认为可以如下使用:

class CSSext
  def attr(nodeset, tag)
    nodeset.first.attribute_nodes.find_all {|node| node.name == tag}
  end
end

doc = Nokogiri::HTML(open(someurl))
doc.css("meta[name='name']:attr('content')", CSSext.new)

但是,这会返回与

相同的结果
doc.css("meta[name='name']")

什么给了? Nokogiri 在下面使用相同的引擎进行 CSS 和 XPath 搜索,因此在 XPath 中可能的任何事情在 CSS 中都应该是可行的。我应该如何提取属性值?

【问题讨论】:

  • 你为什么不走简单的路径并使用doc.css("meta[name='name']")? Nokogiri 中的 CSS 在任何节点查找中都是 XPath 的非常有用的替代品。做更简单的事情,这样更容易理解和维护。
  • @Scott Roepnack:这不是用于格式化的an appropriate use of backticks。另请注意,您也导致链接 Markdown 中断...

标签: html css ruby css-selectors nokogiri


【解决方案1】:

为什么不只是?

doc.at("meta[name='author']")['content']

据我了解,伪类只能用于过滤节点集,但不能用其他值(例如节点属性之一的值)替换节点集。

【讨论】:

    猜你喜欢
    • 2020-01-02
    • 1970-01-01
    • 2015-01-04
    • 2010-12-30
    • 2013-08-20
    • 2013-08-22
    • 2019-05-14
    • 2014-03-25
    • 2019-05-15
    相关资源
    最近更新 更多