Golang colly爬虫框架如何用_Golang colly教程【进阶】
c.Visit()未触发OnHTML最常见原因是请求被目标站拦截导致403因Colly默认UA易被拒绝需设自定义UserAgent、加OnResponse打印状态码、处理重定向、传完整URL、用Limit()控并发、解压gzip、避开JS渲染页、选稳定选择器、用连接池channel安全存库。为什么 c.Visit() 调了却没触发 OnHTML最常见原因不是代码写错了而是请求根本没成功——被目标站拦在第一关。Colly 默认 UA 是 colly - https://github.com/gocolly/colly多数网站尤其是 nginx 前置的直接 403 拒绝连 HTML 都不返回OnHTML 自然不会执行。必须显式设置 c.UserAgent例如 c.UserAgent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36加 c.OnResponse(func(r *colly.Response) { log.Println(r.StatusCode, r.Request.URL) }) 确认是否真收到了 200遇到 302 重定向默认不跟需设 c.AllowURLRevisit true否则跳转后 URL 被去重丢弃c.Visit() 只接受完整 URL含 https://传 /page/2 这类相对路径会静默失败并发数设成 c.Async true 就够了吗不够而且非常危险。c.Async true 只是开启异步模式底层仍是单协程串行发请求真正控制并发的是 c.Limit()不设它等于没并发。默认行为无 LimitRule → 所有请求排队等前一个结束才发下一个正确做法用 c.Limit(colly.LimitRule{DomainGlob: *, Parallelism: 4}) 控制最大并行请求数别盲目调高 Parallelism设到 10 容易触发目标站风控或本地 too many open files 错误不同域名建议分开限流比如 GitHub Pages 内容静态但反爬严colly.LimitRule{DomainGlob: *.github.io, Parallelism: 1}OnHTML(div.title) 提取不到内容先查这三件事不是选择器写错就是你看到的 HTML 和 Colly 拿到的根本不是一回事。浏览器里能看见不代表服务器返回的就是那个结构。网页可能返回 gzip 压缩内容但 Colly 默认不解压 → 加 c.OnResponse(func(r *colly.Response) { r.Collector.UnifyUTF8 true }) 强制 UTF-8 并启用解压JS 渲染的内容如 React/Vue SPAColly 看不见 → 检查源码里有没有 id__next 或 data-server-rendered有就别硬扛换 Puppeteer选择器太深、依赖属性顺序或空格 → 改用 class 名优先h1.post-title 比 body article header h1 更稳调试技巧在 OnResponse 里打印 string(r.Body[:min(200, len(r.Body))])确认返回体是不是你预期的 HTML结果存 MySQL 时连接池爆满怎么安全写入Colly 回调本身就在 goroutine 里跑每个 OnHTML 都开个 sql.Open()几秒内就能打满数据库连接数。 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2525062.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!