You need to enable JavaScript to run this app. 使用Golang Colly爬取亚马逊商品标题被验证码拦截如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Golang Colly爬取亚马逊商品标题被验证码拦截如何解决

Golang Colly爬取亚马逊防验证码拦截解决方案

当前代码未做任何反爬适配,亚马逊反爬机制会识别非浏览器的请求特征,因此大概率触发验证码拦截,以下是Golang生态可直接落地的解决方法:

  • 配置标准浏览器请求头:替换Colly默认的User-Agent,新增Accept、Accept-Language、Referer等标准请求头,同时开启Cookie持久化,亚马逊对Cookie有效性校验非常严格。
  • 控制请求频率:设置随机请求延迟,降低并发数,避免高频请求触发IP风控。
  • 配置代理IP池:单IP请求次数超过阈值必然被封,采集量级较大时必须搭配代理IP池使用,每次请求切换不同IP。
  • TLS指纹伪装:Go默认http客户端的TLS指纹特征和真实浏览器差异较大,亚马逊会通过TLS指纹识别爬虫,可使用支持TLS指纹伪装的HTTP库替换Colly底层客户端,模拟Chrome的TLS特征。
  • 自动验证码识别:若仍触发验证码,可接入第三方打码平台的Golang SDK,自动识别验证码内容后提交即可。

修正后可运行代码示例

package main

import (
	"fmt"
	"math/rand"
	"strings"
	"time"

	"github.com/gocolly/colly"
)

// 随机User-Agent池,模拟不同桌面浏览器
var userAgents = []string{
	"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
	"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
	"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/119.0",
}

func main() {
	rand.Seed(time.Now().UnixNano())
	c := colly.NewCollector(
		colly.AllowedDomains("www.amazon.com", "amazon.com"),
		// 开启Cookie持久化
		colly.CookieJar(nil),
	)

	// 配置请求频率规则
	err := c.Limit(&colly.LimitRule{
		DomainGlob:  "*amazon.*",
		RandomDelay: 2 * time.Second, // 随机增加0-2秒延迟
		Parallelism: 1,               // 限制单并发
	})
	if err != nil {
		panic(err)
	}

	// 请求前自动设置请求头
	c.OnRequest(func(r *colly.Request) {
		r.Headers.Set("User-Agent", userAgents[rand.Intn(len(userAgents))])
		r.Headers.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
		r.Headers.Set("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2")
		r.Headers.Set("Referer", "https://www.amazon.com/")
		r.Headers.Set("Upgrade-Insecure-Requests", "1")
	})

	// 直接匹配商品标题节点,无需遍历所有div提升效率
	c.OnHTML("span#productTitle", func(h *colly.HTMLElement) {
		title := strings.TrimSpace(h.Text)
		fmt.Println("商品标题:", title)
	})

	// 拦截验证码提示
	c.OnHTML("div#captchacharacters", func(h *colly.HTMLElement) {
		fmt.Println("触发验证码拦截,请接入打码服务完成验证")
	})

	// 按需配置代理,替换为自有代理地址即可
	// c.SetProxy("http://代理IP:端口")

	c.Visit("https://www.amazon.com/Bluetooth-Over-Ear-Headphones-Foldable-Prolonged/dp/B07K5214NZ")
}

你提到的程序运行时的英文提示翻译为:

请输入下方你看到的字符。抱歉,我们需要确认你不是机器人。为获得最佳效果,请确保你的浏览器已接受Cookie。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 05:45:00