如何使用 Nokogiri 获取没有任何文本内容的完整 HTML
How to use Nokogiri to get the full HTML without any text content
我正在尝试使用 Nokogiri 获取完整的页面 HTML,但所有文本都被删除了。
我试过这个:
require 'nokogiri'
x = "<html> <body> <div class='example'><span>Hello</span></div></body></html>"
y = Nokogiri::HTML.parse(x).xpath("//*[not(text())]").each { |a| a.children.remove }
puts y.to_s
这输出:
<div class="example"></div>
我也试过 运行 它没有 children.remove
部分:
y = Nokogiri::HTML.parse(x).xpath("//*[not(text())]")
puts y.to_s
但后来我得到:
<div class="example"><span>Hello</span></div>
但我真正想要的是:
<html><body><div class='example'><span></span></div></body></html>
注意: 这是一种非常激进的方法。 <script>
、<style>
和 <noscript>
等标签也有包含 CSS、HTML 和 JS 的子 text()
节点,您可能不想根据您的用例过滤掉。
如果您对已解析的文档进行操作而不是捕获迭代器的 return 值,您将能够删除文本节点,然后 return 文档:
require 'nokogiri'
html = "<html> <body> <div class='example'><span>Hello</span></div></body></html>"
# Parse HTML
doc = Nokogiri::HTML.parse(html)
puts doc.inner_html
# => "<html> <body> <div class=\"example\"><span>Hello</span></div>\n</body>\n</html>"
# Remove text nodes from parsed document
doc.xpath("//text()").each { |t| t.remove }
puts doc.inner_html
# => "<html><body><div class=\"example\"><span></span></div></body></html>"
我正在尝试使用 Nokogiri 获取完整的页面 HTML,但所有文本都被删除了。
我试过这个:
require 'nokogiri'
x = "<html> <body> <div class='example'><span>Hello</span></div></body></html>"
y = Nokogiri::HTML.parse(x).xpath("//*[not(text())]").each { |a| a.children.remove }
puts y.to_s
这输出:
<div class="example"></div>
我也试过 运行 它没有 children.remove
部分:
y = Nokogiri::HTML.parse(x).xpath("//*[not(text())]")
puts y.to_s
但后来我得到:
<div class="example"><span>Hello</span></div>
但我真正想要的是:
<html><body><div class='example'><span></span></div></body></html>
注意: 这是一种非常激进的方法。 <script>
、<style>
和 <noscript>
等标签也有包含 CSS、HTML 和 JS 的子 text()
节点,您可能不想根据您的用例过滤掉。
如果您对已解析的文档进行操作而不是捕获迭代器的 return 值,您将能够删除文本节点,然后 return 文档:
require 'nokogiri'
html = "<html> <body> <div class='example'><span>Hello</span></div></body></html>"
# Parse HTML
doc = Nokogiri::HTML.parse(html)
puts doc.inner_html
# => "<html> <body> <div class=\"example\"><span>Hello</span></div>\n</body>\n</html>"
# Remove text nodes from parsed document
doc.xpath("//text()").each { |t| t.remove }
puts doc.inner_html
# => "<html><body><div class=\"example\"><span></span></div></body></html>"