遍历 *goquery.Selection
Iterate over *goquery.Selection
我几天前才开始学习围棋,所以请多多包涵。 :)
我正在使用 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()
选择转换为数组或切片,以便我可以遍历它们(或者,更好的是,弄清楚 goquery
是否具有此功能) .我确定有办法做到这一点,对吧?
我试过这样做(在 func ExampleScrape
内):
var x []string
doc.Find("h1").Each(func(i int, s *goquery.Selection) {
append(x, s.Text())
})
但它没有工作,因为 'nested'/闭包函数中的 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,而是 returns 一个新的切片。
所以你真的需要做:
x = append(x, s.Text())
我几天前才开始学习围棋,所以请多多包涵。 :)
我正在使用 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()
选择转换为数组或切片,以便我可以遍历它们(或者,更好的是,弄清楚 goquery
是否具有此功能) .我确定有办法做到这一点,对吧?
我试过这样做(在 func ExampleScrape
内):
var x []string
doc.Find("h1").Each(func(i int, s *goquery.Selection) {
append(x, s.Text())
})
但它没有工作,因为 'nested'/闭包函数中的 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,而是 returns 一个新的切片。
所以你真的需要做:
x = append(x, s.Text())