You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Colly实战问题:如何获取子元素的文本内容?

解决Colly爬取Lazada商品标题的问题

问题原因

你用ChildAttrs传入"text"无法获取内容,是因为ChildAttrs的设计目的是获取HTML元素的属性值(比如class、id这类属性),而元素的文本内容并不是HTML属性,所以这个方法完全不适用于获取文本。

正确解决方案

1. 直接获取目标元素的文本

针对你要爬取的h1.pdp-mod-product-badge-title元素,直接使用Colly提供的Text()方法就能拿到文本内容,代码示例:

package main

import (
	"fmt"
	"github.com/gocolly/colly/v2"
)

func main() {
	// 初始化Collector
	c := colly.NewCollector(
		colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"),
	)

	// 监听目标元素
	c.OnHTML("h1.pdp-mod-product-badge-title", func(e *colly.HTMLElement) {
		// 获取当前元素的文本内容
		title := e.Text
		fmt.Println("商品标题:", title)
	})

	// 发起请求
	err := c.Visit("https://www.lazada.vn/-i1701980654-s7563711492.html")
	if err != nil {
		fmt.Printf("请求失败:%v\n", err)
	}
}

2. 处理动态渲染的情况

如果上面的代码还是拿不到内容,大概率是Lazada用JavaScript动态渲染了页面内容。这时候需要启用Colly的Headless模式来加载JS,代码调整如下:

package main

import (
	"fmt"
	"github.com/gocolly/colly/v2"
	"github.com/gocolly/colly/v2/extensions"
)

func main() {
	// 初始化支持Headless的Collector
	c := colly.NewCollector(
		colly.Headless(true),
		colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"),
	)

	// 启用扩展,处理JS渲染后的页面
	extensions.RandomUserAgent(c)

	// 监听目标元素
	c.OnHTML("h1.pdp-mod-product-badge-title", func(e *colly.HTMLElement) {
		fmt.Println("商品标题:", e.Text)
	})

	// 发起请求
	err := c.Visit("https://www.lazada.vn/-i1701980654-s7563711492.html")
	if err != nil {
		fmt.Printf("请求失败:%v\n", err)
	}
}

关键知识点

  • ChildAttrs(selector, attr string):仅用于获取指定选择器下元素的某个属性值,比如ChildAttrs("a", "href")拿链接地址
  • Text():获取当前HTMLElement的文本内容
  • ChildText(selector string):获取指定子选择器下的文本内容(如果目标文本在当前元素的子节点里时使用)

内容的提问来源于stack exchange,提问作者Chau Loi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:45:32