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

能否使用gocolly爬取CSR(客户端渲染/JS)网站?附代码场景

关于GoColly爬取CSR网站的问题解答

1. GoColly能否爬取CSR网站?

GoColly默认不支持客户端JavaScript渲染。它本质是发送HTTP请求获取页面的静态HTML源码,无法执行页面中的JS代码。对于依赖JS动态生成DOM结构的CSR网站,你现有的OnXML逻辑只能抓取到初始HTML里的内容,拿不到JS渲染后的动态数据。

2. 推荐的替代方案

chromedp

直接基于Chrome/Chromium的DevTools协议实现,能完全模拟真实浏览器环境,支持执行JS、等待页面渲染完成、处理动态元素。它原生支持XPath选择器,可以直接复用你数据库中存储的titleXpath规则,适合处理复杂的CSR场景。

示例代码片段:

package main

import (
	"context"
	"fmt"
	"github.com/chromedp/chromedp"
)

func main() {
	ctx, cancel := chromedp.NewContext(context.Background())
	defer cancel()

	var titleText string
	targetXpath := "//title" // 替换为你数据库中的titleXpath

	err := chromedp.Run(ctx,
		chromedp.Navigate("https://your-target-csr-site.com"),
		chromedp.WaitVisible(targetXpath), // 等待目标元素加载完成
		chromedp.Text(targetXpath, &titleText),
	)
	if err != nil {
		panic(err)
	}
	fmt.Println("title", titleText)
}

rod

同样基于DevTools协议,但做了更高层次的封装,API设计更简洁直观,内置了自动等待元素加载、页面交互等便捷方法,上手成本更低,适合快速开发爬虫。

GoColly + 无头浏览器组合

如果不想完全替换GoColly,可以保留它的解析逻辑,配合chromedp/rod获取渲染后的HTML源码,再传入GoColly处理:

// 先用chromedp获取渲染后的HTML
var htmlContent string
chromedp.Run(ctx,
	chromedp.Navigate("https://your-target-csr-site.com"),
	chromedp.OuterHTML("html", &htmlContent),
)

// 再用GoColly解析HTML
c := colly.NewCollector()
c.OnXML(targetXpath, func(e *colly.XMLElement) {
	fmt.Println("title", e.Text)
})
c.ParseString(htmlContent)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:18:39