Nokogiri,从页面中获取所有 类
Nokogiri, fetch all classes from page
如何从 html 页面获取所有 类 的数组?
我正在尝试这样
page = Nokogiri::HTML.parse(html)
page.classes
=> []
#classes
returns 仅 类 节点本身。它不处理子节点。您需要递归扫描所有子节点。
require 'nokogiri'
def flatten_dom(node)
node.elements.flat_map { |child| flatten(child) } << node
end
page = Nokogiri::HTML.parse('<html><body class="a b"><b class="c">x</b></body></html>')
flatten(page).flat_map(&:classes)
# => ["c", "a", "b"]
您可能还想添加 .uniq
以删除重复项。
以下是我如何使用 Nokogiri 获取页面的所有 类:
def classes(element)
(
element.attr('class').to_s.split +
element.children.map { |c| classes(c) }
).flatten.compact
end
page = Nokogiri::HTML(File.read('a.html'))
classes(page)
# => ["max-w-md", "my-4", "p-4", "mx-auto", "bg-gray-200", "bg-gray-300", "rounded", "mb-4", "block", "no-underline", "overflow-hidden", "flex", "w-20", "h-32", "bg-cover", "bg-no-repeat", "bg-center", "overflow-hidden", "font-bold", "px-4", "pt-2", "underline", "truncate", "px-4", "truncate", "text-sm", "px-4", "truncate", "text-sm", "px-4", "truncate", "text-sm", "text-gray-600", "px-4", "truncate", "text-sm", "rounded-full", "w-5", "mr-1", "inline-block", ...]
如何从 html 页面获取所有 类 的数组?
我正在尝试这样
page = Nokogiri::HTML.parse(html)
page.classes
=> []
#classes
returns 仅 类 节点本身。它不处理子节点。您需要递归扫描所有子节点。
require 'nokogiri'
def flatten_dom(node)
node.elements.flat_map { |child| flatten(child) } << node
end
page = Nokogiri::HTML.parse('<html><body class="a b"><b class="c">x</b></body></html>')
flatten(page).flat_map(&:classes)
# => ["c", "a", "b"]
您可能还想添加 .uniq
以删除重复项。
以下是我如何使用 Nokogiri 获取页面的所有 类:
def classes(element)
(
element.attr('class').to_s.split +
element.children.map { |c| classes(c) }
).flatten.compact
end
page = Nokogiri::HTML(File.read('a.html'))
classes(page)
# => ["max-w-md", "my-4", "p-4", "mx-auto", "bg-gray-200", "bg-gray-300", "rounded", "mb-4", "block", "no-underline", "overflow-hidden", "flex", "w-20", "h-32", "bg-cover", "bg-no-repeat", "bg-center", "overflow-hidden", "font-bold", "px-4", "pt-2", "underline", "truncate", "px-4", "truncate", "text-sm", "px-4", "truncate", "text-sm", "px-4", "truncate", "text-sm", "text-gray-600", "px-4", "truncate", "text-sm", "rounded-full", "w-5", "mr-1", "inline-block", ...]