首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在*goquery.Selection上迭代

在*goquery.Selection上迭代
EN

Stack Overflow用户
提问于 2015-01-05 09:09:15
回答 1查看 2.3K关注 0票数 0

我几天前才开始学去,所以请容忍我。:)

我正在用goquery从网页中获取文本。如下所示:

代码语言:javascript
复制
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中):

代码语言:javascript
复制
var x []string
doc.Find("h1").Each(func(i int, s *goquery.Selection) {
    append(x, s.Text())
})

但是它没有工作,因为“嵌套”/闭包函数中的append仍然是该函数的本地函数--它不会被返回到func ExampleScrape。所以我试了一下:

代码语言:javascript
复制
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。:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-05 11:35:02

我认为,如果您正确地使用append,您的第一次尝试可能会成功。append(x, s.Text())不改变x,而是返回一个新的切片。

所以你真的需要做:

代码语言:javascript
复制
x = append(x, s.Text())
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27776290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档