go colly的Node能获取到节点内的text值吗?

在获取html页面后,我首先解析的是li节点,然后使用h.DOM.Children().Nodes获取该节点下的所有子节点,

<li>
<img class="headImg" data-src="11111111 " alt="img">
        
                <img class="roleImg" data-src="2222222" alt="img">
        
        <p class="tit">1122334455</p>
        <p class="subTit">上架时间:2023.08.04</p>
        <p class="redirectUrl">#</p>

    </li>
c.OnHTML("body > div.wrap > ul.skinform-news > li ", func(h *colly.HTMLElement) {

    for _, node := range h.DOM.Children().Nodes {
        if node.Attr[0].Val == "roleImg" {
            fmt.Println(node.Attr[1].Val)
        }
    }

})

返回的是Node对象,但我看了下,Node对象中没有获取节点Text的方法,也没有相关属性,下面是colly的Node对象

type Node struct {
    Parent, FirstChild, LastChild, PrevSibling, NextSibling *Node

    Type      NodeType
    DataAtom  atom.Atom
    Data      string
    Namespace string
    Attr      []Attribute
}

我想要从第一个p节点中获取值“1122334455”,如果不改变代码写法,是不是从Node对象中无法获取节点的文字(Text)。

【以下回答由 GPT 生成】

使用Goquery库可以方便地从Node对象中获取节点的文本值。

首先,确保已经安装了goquery库。可以使用以下命令来安装:

go get github.com/PuerkitoBio/goquery

然后,根据Node对象创建一个*goquery.Selection对象:

selection := goquery.NewDocumentFromNode(node)

接下来,使用Text()方法获取节点的文本值:

text := selection.Text()

下面是更新后的代码:

c.OnHTML("body > div.wrap > ul.skinform-news > li", func(h *colly.HTMLElement) {
    for _, node := range h.DOM.Children().Nodes {
        if node.Attr[0].Val == "roleImg" {
            selection := goquery.NewDocumentFromNode(node)
            text := selection.Text()
            fmt.Println(text)
        }
    }
})

这样可以在不改变代码写法的情况下从Node对象中获取节点的文本值。

请注意,上述解决方案假设你已经引入了goquery库和colly库,并且已正确设置。如有其他问题,请提供更多详细信息。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^