gpt4 book ai didi

goquery- 将标签与后面的标签连接起来

转载 作者:IT王子 更新时间:2023-10-29 01:46:00 25 4
gpt4 key购买 nike

关于一些背景信息,我是 Go 的新手(3 或 4 天),但我开始适应它了。

我正在尝试使用 goquery解析网页。 (最终我想把一些数据放在数据库中)。对于我的问题,一个例子将是解释它的最简单方法:

<html>
<body>
<h1>
<span class="text">Go </span>
</h1>
<p>
<span class="text">totally </span>
<span class="post">kicks </span>
</p>
<p>
<span class="text">hacks </span>
<span class="post">its </span>
</p>
<h1>
<span class="text">debugger </span>
</h1>
<p>
<span class="text">should </span>
<span class="post">be </span>
</p>
<p>
<span class="text">called </span>
<span class="post">ogle </span>
</p>
<h3>
<span class="statement">true</span>
</h3>
</body>
<html>

我愿意:

  1. 提取<h1..."text"的内容.
  2. 将提取的内容插入(并连接)到 <p..."text" 的内容中.
  3. 仅对 <p> 执行此操作紧跟 <h1> 的标签标签。
  4. <h1>所有 执行此操作页面上的标签。

这就是我想要的样子:

<html>
<body>
<p>
<span class="text">Go totally </span>
<span class="post">kicks </span>
</p>
<p>
<span class="text">hacks </span>
<span class="post">its </span>
</p>
<p>
<span class="text">debugger should </span>
<span class="post">be </span>
</p>
<p>
<span class="text">called </span>
<span class="post">ogle</span>
</p>
<h3>
<span class="statement">true</span>
</h3>
</body>
<html>

代码是这样开始的,

package main

import (
"fmt"
"strings"
"github.com/PuerkitoBio/goquery"
)

func main() {
html_code := strings.NewReader(`code_example_above`)
doc, _ := goquery.NewDocumentFromReader(html_code)

我知道我可以阅读 <h1..."text"与:

h3_tag := doc.Find("h3 .text")

我也知道可以加上<h1..."text"的内容到<p..."text"的内容有了这个:

doc.Find("p .text").Before("h3 .text")

^但是这个命令插入了 <h1..."text"每一个案例中的内容在 <p..."text"每一个案例之前.

然后,我发现了如何更接近我想要的东西:

doc.Find("p .text").First().Before("h3 .text")

^此命令插入 <h1..."text"每个 案例中的内容<p..."text"第一个案例之前(这更接近我想要的)。

我也试过使用 goqueryEach()功能,但我无法通过该方法更接近我想要的(尽管我确定有一种方法可以使用 Each() 来实现,对吧?)

我最大的问题是我不知道如何关联 <h1..."text" 的每个实例与 <p..."text"紧随其后的实例。

如果有帮助,<h1..."text" 总是 后跟 <p..."text"在我尝试解析的网页上。

我的脑子没电了。有围棋天才知道怎么做并且愿意解释一下吗?提前致谢。

编辑

我发现了我可以做的其他事情:

doc.Find("h1").Each(func(i int, s *goquery.Selection) {
nex := s.Next().Text()
fmt.Println(s.Text(), nex, "\n\n")
})

^这打印出了我想要的——<h1..."text"的每个实例的内容紧随其后的是 <p..."text" 的直接实例.我以为s.Next()将输出 <h1> 的下一个实例, 但它输出 doc 中的下一个标签--*goquery.Selection它正在迭代。对吗?

或者,作为 mattn指出,我也可以使用 doc.Find("h1+p") .

我仍然无法附加 <h1..."text"<p..."text" .我会将其作为另一个问题发布,因为您可以将其分解为多个问题,并且 Mattn已经回答了一个。

最佳答案

不知道你在用goquery写什么代码。但也许,您期望的是邻居选择器。

h1+p

这会返回 h1 标签,它在邻居中有 p 标签。

关于goquery- 将标签与后面的标签连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27789446/

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