gpt4 book ai didi

ruby - 使用 Nokogiri 在随机选择的
标签之间选择所有 标签

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:30 25 4
gpt4 key购买 nike

我正在尝试使用 Nokogiri 和 Ruby 解析一些 HTML,但我在做我希望发生的事情时遇到了一些障碍。我的示例文件看起来像这样:

<div id="main-body">
<p>
<span>First Text</span>
<span>Second Text</span>
<span>Third Text</span>
<span>Fourth Text</span>
<br>
<span>Fifth Text</span>
<span>Sixth Text</span>
<span>Seventh Text</span>
<br>
<span>Eight Text</span>
<span>Ninth Text</span>
<br>
</p>
</div

我试图找到一种方法来遍历并仅选择随机中断标记之间或第一次中断之前的文本。

基本上我希望每次我的输出都不同。所以示例输出将是 eg

=>First Text
=>Second Text
=>Third Text
=>Fourth Text

一次,然后,也许下一次它会在 break 2 和 3 之间获取东西

=>Eight Text
=>Ninth Text

我在想,如果我可以计算 HTML 中的中断次数,我就可以使用 rand() 选择一个随机中断并打印出文本,直到我点击下一个中断,但我无法完全理解正确。

到目前为止,我的代码是将整个页面加载到 Nokogiri 类型中并尝试从那里进行解析。

doc = Nokogiri::HTML(open(targeturl))
puts doc.xpath("./br").length #gives me the count of break tags in the document

从那里我实际上可以将中断分配给一个变量并一个一个地访问它们但是我不确定去哪里或者我是否从这里走在正确的轨道上我觉得我只是感到困惑我自己在这一点上:/

最佳答案

您可以使用count()preceding-sibling 根据前面的br 标签数量抓取节点。

puts doc.xpath("//span[count(preceding-sibling::br)=0]")
#=> <span>First Text</span>
#=> <span>Second Text</span>
#=> <span>Third Text</span>
#=> <span>Fourth Text</span>

puts doc.xpath("//span[count(preceding-sibling::br)=1]")
#=> <span>Fifth Text</span>
#=> <span>Sixth Text</span>
#=> <span>Seventh Text</span>

puts doc.xpath("//span[count(preceding-sibling::br)=2]")
#=> <span>Eight Text</span>
#=> <span>Ninth Text</span>

要获得随机选择,只需随机化前面 sibling 的数量:

puts doc.xpath("//span[count(preceding-sibling::br)=#{rand(doc.xpath("//br").length)}]")

关于ruby - 使用 Nokogiri 在随机选择的 <br> 标签之间选择所有 <span> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12623902/

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