gpt4 book ai didi

Ruby 解析来自 Nokogiri::XML::NodeSet 的 链接信息

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:50 25 4
gpt4 key购买 nike

我拉了一个Nokogiri::XML::NodeSet来自页面,结果如下:

<a href="http://www.goldsteinpatentlaw.com" target="_blank" title="Goldstein Patent Law ( U.S.A. )">
<img src="http://www.asdf.com/LBM_Images/Offices//law-firm-goldstein-patent-law-photo-1258381.jpg" height="62" width="100" alt="Goldstein Patent Law (U.S.A.)">
</a>

我无法弄清楚如何转换它(对人类来说很明显)<a>标记到 Mechanize/Nokogiri 解析的对象中,这样我就可以轻松地从链接中检索一些信息。

Nokogiri/Mechanize 文档真的很困惑,因为我不知道该看哪一个。不确定哪个先出现,哪个使用哪个等等。对于我尝试做的简单抓取和解析来说,这似乎过于复杂。

最佳答案

NodeSet 就像一个数组。如果您在 NodeSet 上使用 puts(),那么就像您在 Array 上使用 puts 一样,ruby 将在单独的行上输出 NodeSet 中每个项目的字符串表示形式。 NodeSets 可以包含各种对象,但通常它们将包含名为 <Nokogiri::XML::Element> 的对象。 ,代表您的 html 中的标签。

从您的输出中可以明显看出,您的节点集只有一个项目,您看到的是该项目的字符串表示形式。这是一个例子:

require 'nokogiri'

str = "<div>hello</div><div>world</div>"
html_doc = Nokogiri::HTML(str)

divs = html_doc.xpath("//div")

divs.each do |div|
p div
end

puts '*' * 10
puts divs


--output:--
#<Nokogiri::XML::Element:0x80836ec4 name="div" children=[#<Nokogiri::XML::Text:0x80836a00 "hello">]>
#<Nokogiri::XML::Element:0x80836668 name="div" children=[#<Nokogiri::XML::Text:0x80836064 "world">]>
**********
<div>hello</div>
<div>world</div>

因此您只需检索 NodeSet 的第一个元素,就像检索数组中的第一个元素一样:

p divs[0]

或者,如果您知道您的 NodeSet 中只会有一个元素,那么您可以使用:

div = html_doc.at_xpath("//div")

它不返回 NodeSet,而是返回与 xpath 匹配的第一个元素。

当你真的想知道你得到了什么,你应该使用p而不是 puts .

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