我几天前才开始学去,所以请容忍我。:)
我正在用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())
})但是它没有工作,因为“嵌套”/闭包函数中的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。:)
发布于 2015-01-05 11:35:02
我认为,如果您正确地使用append,您的第一次尝试可能会成功。append(x, s.Text())不改变x,而是返回一个新的切片。
所以你真的需要做:
x = append(x, s.Text())https://stackoverflow.com/questions/27776290
复制相似问题