在获取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
库,并且已正确设置。如有其他问题,请提供更多详细信息。