爬虫抓取Shopee数据时如何解决Verify Traffic错误?
解决Shopee爬取时的Verify Traffic验证问题
Shopee的这个Verify Traffic错误是典型的反爬机制触发,针对这个问题,给你几个实用的解决思路:
补全真实请求头
Shopee会校验请求头的真实性,别只加User-Agent,把浏览器里的Accept、Accept-Language、Referer这些字段都加上,尽量和真实浏览器请求一致。示例代码:import requests headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Referer': 'https://shopee.com.my/' # 按你爬的站点调整 } response = requests.get('你的目标商品URL', headers=headers)用会话维持Cookie
每次单独用requests.get相当于新访客,用requests.Session()保持会话,先访问Shopee首页拿初始Cookie,再请求商品页,模拟正常用户浏览路径:session = requests.Session() session.headers.update(headers) # 先逛首页 session.get('https://shopee.com.my/') # 再去商品页 response = session.get('你的目标商品URL')给请求加随机延迟
别一秒刷几十页,人类不会这么操作。每次请求后随机等1-3秒,降低触发反爬的概率:import time import random # 请求完等一会儿 time.sleep(random.uniform(1, 3))换代理IP
如果单IP请求太频繁被拉黑,就换代理IP。别用免费公开代理,大多已经被Shopee标记了,找靠谱的付费代理池,分散请求来源:proxies = { 'http': 'http://你的代理IP:端口', 'https': 'https://你的代理IP:端口' } response = session.get('你的目标商品URL', proxies=proxies)用浏览器模拟器绕JS验证
要是验证需要执行JS生成参数,requests静态爬就搞不定了,用selenium或者playwright模拟真实浏览器运行JS,完全复刻用户操作:
举个playwright的例子:from playwright.sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch(headless=False) # 调试时可以关掉无头模式看页面 page = browser.new_page() page.goto('你的目标商品URL') page.wait_for_load_state('networkidle') # 等页面加载完 html = page.content() # 拿到html后就可以用BeautifulSoup解析了 browser.close()直接抓Shopee的API接口
很多时候爬网页不如直接调API。打开浏览器开发者工具,看商品页加载时的网络请求,找到返回商品数据的JSON接口,直接请求这个接口拿数据,比解析HTML高效,还能避开部分页面级反爬。
内容的提问来源于stack exchange,提问作者Rado HT Simarmata
相关产品推荐
相关产品推荐

