gpt4 book ai didi

go - 遍历 *goquery.Selection

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

我几天前才开始学习 Go,所以请多多包涵。 :)

我正在使用 goquery 从网页中获取文本。像这样:

package main

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

func ExampleScrape() {
doc, err := goquery.NewDocument("http://lifehacker.com")
if err != nil {
log.Fatal(err)
fmt.Println("fail")
} else {
fmt.Println("got it")
}

h1_text := doc.Find("h1").Text()
fmt.Println(h1_text)
}

func main() {
ExampleScrape()
}

这很好用。我想不通的是如何将 doc.Find("h1").Text() 选择转换为数组或 slice ,以便我可以迭代它们(或者,更好的是,弄清楚 goquery 是否有这个功能)。我确定有办法做到这一点,对吗?

我尝试这样做(在 func ExampleScrape 中):

var x []string
doc.Find("h1").Each(func(i int, s *goquery.Selection) {
append(x, s.Text())
})

但它不起作用,因为“嵌套”/闭包函数中的 append 仍然是该函数的本地——它不会返回到 func ExampleScrape .然后我尝试了这个:

x := doc.Find("h1").Each(func(i int, s *goquery.Selection) {
return s.Text()
})
for _, i := range x {
fmt.Println(x)
}

但是 *goquery.Selection 类型不能被覆盖。

有没有办法像这样迭代*goquery.Selection

顺便说一句,你们这里的人很棒。我总是被我在这里得到的答案所震撼。如果有人可以解释如何执行此操作,请提前感谢 googolplex。 :)

最佳答案

如果您正确使用 append,我认为您的第一次尝试可能会奏效。append(x, s.Text()) 不会更改 x,而是返回一个新 slice 。

所以你真的需要做:

x = append(x, s.Text())

关于go - 遍历 *goquery.Selection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776290/

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