Go的net/http默认无超时,需自定义http.Client并设置Timeout、IdleConnTimeout和TLSHandshakeTimeout;反爬需加User-Agent;goquery不执行JS,仅解析原始HTML;注意网页编码与选择器大小写及嵌套层级;并发需用channel限流。用 net/http 发起请求但返回空或超时?Go 原生 http.Client 默认不带超时,遇到 DNS 卡住、服务无响应,Get 会一直挂起。这不是 bug,是设计选择------你得自己控制。必须显式设置 Timeout,推荐拆成 Timeout(总耗时)、IdleConnTimeout(连接复用空闲时间)和 TLSHandshakeTimeout(TLS 握手)三个字段别直接用 http.Get,它用的是默认全局 client,无法设超时;改用自定义 &http.Client{Timeout: 10 * time.Second}如果目标站有反爬(比如返回 403),大概率是没带 User-Agent;加到 req.Header.Set("User-Agent", "Mozilla/5.0") 再试解析 HTML 时 goquery 找不到元素?goquery 是 jQuery 风格封装,但它不执行 JS,也不等页面动态渲染------它只处理你拿到的原始 HTML 字符串。很多"找不到"本质是 HTML 根本没那部分结构。先用 fmt.Println(htmlBody) 或写入文件,人工确认目标内容是否真在响应里;若不在,说明是前端 JS 渲染,goquery 无解,得换 Puppeteer 或 Playwright注意文档编码:中文站常见 charset=gb2312,但 Go 的 net/http 默认按 UTF-8 解析,会导致乱码进而 selector 失效;用 golang.org/x/net/html + golang.org/x/text/transform 手动转码Find("div.item") 返回空?检查是否漏了空格或大小写:class="Item" 和 .item 不匹配;也可能是嵌套层级比你预期深,用 Children() 或 Parents() 调试路径并发抓取时被封 IP 或连接数爆炸?Go 的 goroutine 轻量,但不等于能无脑开 1000 个 http.Get。操作系统级连接限制、目标站限流、DNS 查询排队都会立刻暴露。用带缓冲的 channel 控制并发数,比如 sem := make(chan struct{}, 10),每次请求前 sem ,结束后 <code><-semhttp.Transport 必须复用:设置 MaxIdleConns(全局最大空闲连接)、MaxIdleConnsPerHost(单域名最大),否则每个请求新建 TCP 连接,很快 hit "too many open files"加随机延时不是为了"模拟人",而是错开请求峰;用 time.Sleep(time.Millisecond * time.Duration(rand.Intn(500))),别固定值,固定值容易被识别为扫描器保存图片或二进制文件时内容损坏?常见错误是把 response.Body 当字符串读,比如用 ioutil.ReadAll 后再 string() 转,二进制数据一转就废。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能
相关推荐
WL_Aurora1 小时前
Python爬虫实战(六):新发地蔬菜价格数据采集.盲敲代码的阿豪1 小时前
Python 入门基础教程(爬虫前置版)秋92 小时前
windows中安装redisweixin199701080162 小时前
[特殊字符] 智能数据采集:数字化转型的“数据石油勘探队”(附Python实战源码)Cosolar2 小时前
万字详解:RAG 向量索引算法与向量数据库架构及实战想唱rap2 小时前
IO多路转接之pollSeaTunnel3 小时前
AI 让 SeaTunnel 读源码和调试过时了吗?次元工程师!3 小时前
LangFlow开发(三)—Bundles组件架构设计(3W+字详细讲解)凯瑟琳.奥古斯特3 小时前
数据冗余与规范化的本质[数据库原理]