gpt4 book ai didi

html - 如何使用 Nokogori 同时解析 html 文件中标签的属性和值?

转载 作者:太空宇宙 更新时间:2023-11-03 18:08:03 24 4
gpt4 key购买 nike

假设我有一个名为 ex.html 的 html 文件,如下所示:

<ul>
<li data-value="datav1">val1</li>
<li data-value="datav2">val2</li>
<li data-value="datav3">val3</li>
</ul>

我想逐行提取属性data-value和文本值并输出结果如下:

datav1:val1

datav2:val2

datav3:val3

但是我是Nokogori的新手,我只知道下面的代码,它只能提取属性data-value,我不知道如何在同一循环中提取属性和文本值。

require 'nokogiri'
page_temp = Nokogiri::HTML(open("ex.html"))
page_temp.xpath('//li/@data-value').each do |node|
puts node
end

如果有人能教我如何通过 Nokogori 使其工作,我将不胜感激,如果有任何其他解决方案可以简单地使用 shell 脚本,那就更好了。

更新

感谢@Rajarshi Das 和@Arun Kumar,您的回答部分解决了我的问题。现在的问题是 node.text 是一些汉字。当我在终端中打印出来时,它们无法识别。在执行 page_temp = Nokogiri::HTML(open("ex.html")) 之后,我试图打印出 page_temp,我发现所有的汉字都像€。所以我想我在 ruby​​ 中读错了 ex.html 文件。

最佳答案

你可以这样试试....

 page_temp.xpath('//li').each do |node|
puts "#{node.attributes['data-value'].value}:#{node.children.first.content}"
end

并输出得到

   datav1:val1
datav2:val2
datav3:val3

通过nokogiri,你可以像第一步一样一步一步地做

 page_temp.xpath('//li').each do |node|

你只需要拿一个项目就可以得到它给出的输出

 page_temp.xpath('//li').first
#=> #<Nokogiri::XML::Element:0x1827ae0 name="li" attributes=[#<Nokogiri::XML::Attr:0x1827aa4 name="data-value" value="datav1">] children=[#<Nokogiri::XML::Text:0x182781c "val1">]>

现在你需要datav1:val1

所以datav1在属性中

page_temp.xpath('//li').first.attributes
=> {"data-value"=>#<Nokogiri::XML::Attr:0x1827aa4 name="data-value" value="datav1">}

因此,您可以执行 page_temp.xpath('//li').first.attributes["data-value"].value

page_temp.xpath('//li').first.attributes["data-value"].value #=>数据v1

现在是 val1

nokogiri 实例还有一个 children 属性,它包含元素 text/content

所以

page_temp.xpath('//li').first.children
=> [#<Nokogiri::XML::Text:0x182781c "val1">]
page_temp.xpath('//li').first.children.first.content
=> val1

现在在循环中获得两个期望输出元素,将它们用作 page_temp.xpath('//li').first 替换为 node 并以期望格式显示字符串。

原来如此

"#{node.attributes['data-value'].value}:#{node.children.first.content}"

关于html - 如何使用 Nokogori 同时解析 html 文件中标签的属性和值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40446330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com