使用Cheerio抓取谷歌搜索链接时href出现/url?q=的原因排查
谷歌搜索抓取时href出现"/url?q="的原因及操作问题解析
原因:谷歌的跳转代理机制
谷歌搜索结果的链接,服务器返回的原始静态HTML里就是以"/url?q="开头的。这是谷歌用来做跳转追踪、安全验证的中间代理:当用户点击链接时,先经过谷歌的跳转服务器,再跳转到目标地址。
你在浏览器开发者工具里看到的真实URL,是浏览器加载页面后,执行了谷歌的前端JavaScript代码,动态把跳转链接替换成了目标地址的结果。而Cheerio只会解析静态HTML,不会执行页面JS,所以拿到的是原始的跳转链接。
你的操作问题
你误以为浏览器里看到的元素状态就是服务器返回的原始HTML状态,但实际上这些链接是JS动态修改过的。Cheerio作为静态解析工具,无法处理JS渲染的内容,因此抓取到的是未被JS替换的原始跳转链接。
补充:更稳健的真实URL提取方式
你用的提取方法没问题,但可以加个判断避免异常:
const actualUrl = href.startsWith('/url?q=') ? decodeURIComponent(href.split('/url?q=')[1].split('&')[0]) : href;
内容的提问来源于stack exchange,提问作者Happy Coconut
相关产品推荐
相关产品推荐

