colly 抓网页为空主因是默认不执行 javascript,vue/react 渲染内容需换 playwright-go;excel 导出推荐 excelize,注意字体设置、批量写入和避免并发写文件。

用 colly 抓网页数据时为什么总是空?
多数人第一次用 colly 拿不到内容,不是选择器写错,而是没等页面加载完就结束了——colly 默认不执行 JavaScript,遇到 Vue/React 渲染的内容直接返回空 DOM。
实操建议:
- 先用浏览器打开目标页,右键「查看页面源代码」,确认你要的数据是否在原始 HTML 里;不在的话,
colly无解,得换cdp或playwright-go - 检查选择器是否带空格或大小写错误,比如
div.title和div .title完全不同 - 加
c.OnError(...)打印错误,常见是 DNS 失败或被 403 拦截,这时候要设User-Agent:
c.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
保存到 Excel 用 excelize 还是 tealeg/xlsx?
excelize 是当前最活跃、兼容性最好的 Go Excel 库,支持 .xlsx 写入/读取、公式、样式、流式写入;tealeg/xlsx 已归档,新项目别碰。
关键差异点:
立即学习“go语言免费学习笔记(深入)”;
-
excelize的 sheet 名不能含[ ] * ? / \,否则f.SaveAs()报"invalid sheet name" - 写大数据量(>10 万行)时,别用
f.SetCellValue()逐行调用,改用f.SetSheetRow()批量写入,性能差 5–10 倍 - 中文字段导出乱码?不是编码问题,是字体没设:必须调
f.SetCellStyle("Sheet1", "A1", "A1", styleID)并提前用f.NewStyle()指定字体如"SimSun"或"Arial Unicode MS"
爬虫 + Excel 流程中哪些地方容易 panic?
最常崩在三处:并发写文件、空指针解引用、Excel 单元格超长截断。
具体避坑方式:
- 多个 goroutine 同时调
f.SaveAs("out.xlsx")?必 panic。解决方法:所有数据收集完再统一写,或用sync.Mutex包住f.SaveAs -
colly.Collector.Find(...).Text()返回空字符串,直接传给f.SetCellValue()没问题,但若后续做strings.Split(text, ",")[0]就会 panic——务必先判空或用if len(s) > 0 - Excel 单元格最多存 32767 字符,超长内容会被静默截断。如果业务上不能丢数据,要么拆行,要么存本地文本文件,别硬塞进 Excel
本地跑通了,部署到 Linux 服务器却打不开生成的 Excel?
不是权限问题,大概率是缺少字体导致样式渲染失败,Excel 打开报「发现不可读内容」,点「是」后数据还在,但格式全丢。
验证和修复步骤:
- 在服务器跑
fc-list | grep -i simsun,没输出说明缺宋体;Ubuntu 可装fonts-wqy-zenhei,CentOS 装liberation-fonts-common - 代码里别写死
"SimSun",改用"Liberation Sans"或"DejaVu Sans"这类开源字体,跨平台稳 - 生成完用
file out.xlsx确认是 ZIP 格式(Excel 本质是 zip),如果是空文件或损坏,八成是f.Close()没调用,defer 里漏写了
真正麻烦的是反爬策略升级和 Excel 样式细节——比如合并单元格跨行后插入新行会错位,这种得边测边调,没法一劳永逸。










