ruby-on-rails - 使用 Nokogiri 列出 HTML 中存在的标签

标签 ruby-on-rails ruby nokogiri

我正在尝试使用 Nokogiri 来统计 HTML 页面上的所有属性。假设我搜索 Google,我如何使用 Nokogiri 计算来自该域源的每个 HTML 标记?

这是我的出发点,没有产生我期望的结果:

require 'open-uri'
doc = Nokogiri::HTML(open("http://www.stackoverflow.com/"))
@doc = Nokogiri::XML(doc)
@doc.xpath("//*")

最佳答案

像这样的东西会做你正在寻找的东西:

require 'nokogiri'
require 'open-uri'
require 'awesome_print'

# Create a Nokogiri document
doc = Nokogiri::HTML(open("http://www.stackoverflow.com/").read)
# Iterate each node in the result set, and for each tag, increment the appropriate counter on the output hash
ap doc.xpath("//*").map(&:name).each_with_object({}) {|n, r| r[n] = (r[n] || 0) + 1 }

和结果:

{
        "html" => 1,
        "head" => 1,
       "title" => 1,
        "link" => 5,
        "meta" => 7,
      "script" => 13,
        "body" => 1,
    "noscript" => 2,
         "div" => 1429,
          "h3" => 99,
           "a" => 717,
          "ul" => 5,
          "li" => 89,
        "span" => 490,
        "form" => 1,
       "input" => 1,
          "br" => 4,
           "b" => 3,
          "ol" => 8,
          "h1" => 1,
         "img" => 9,
          "h2" => 1,
          "h4" => 1,
       "table" => 1,
          "tr" => 2,
          "th" => 5,
          "td" => 7
}

#name 是每个节点上具有标签名称的属性,因此我们只需将节点集缩减为输出散列,以此作为键控。

关于ruby-on-rails - 使用 Nokogiri 列出 HTML 中存在的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29242822/

相关文章:

ruby-on-rails - 如何在 Windows 上安装 Nokogiri 1.6.7.2

ruby-on-rails - Rails - 如何通过我的支付模型为我的用户表添加值(value)?

ruby-on-rails - 设计和 Rspec - 未定义的方法 `authenticate!' 为 nil :NilClass

ruby-on-rails - 使用 Model.update_attributes 时模型不会保存更改! Rails 3 迁移期间

ruby-on-rails - 不会为 Heroku 设置 Figaro 环境变量

ruby-on-rails - OpenSSL 导致 Windows 上的 Rails 启动时间非常慢

ruby - 带有 dict 元素的 Plist XPath 查询

ruby - 使用 Nokogiri 解析 index.html 并使用以下文本分配 a.link

ruby-on-rails - Rails - activeadmin,在更新 "parent"记录时复制 has_many 记录

ruby-on-rails - 处理 Rails 中的用户滥用