竞品采集到底在采什么
做电商竞品监控,说到底就是盯着对手三个东西:价格、库存、评论。价格变了你要第一时间知道,库存空了你得赶紧补位,评论里冒出差评了你要研究对手的弱点。这三样数据加起来,就是竞品情报的基本盘。
但真上手采过的人都知道,这三样数据的抓取难度完全不在一个量级。价格相对好采——大部分平台的价格直接写在HTML里。库存就难了——很多平台不直接显示库存数量,你得从"仅剩X件"或"到货通知"这类间接信号推断。评论最难——平台对评论接口的反爬最严,分页深度大,数据结构复杂。
三个维度的采集难点
价格采集
价格是变化最频繁的维度,一个SKU一天可能调价3-5次。采集价格的核心难点有两个:一是动态渲染,部分平台价格通过JS加载,requests拿到的HTML里价格位置是空的;二是多规格SKU,同一商品不同颜色不同配置价格不同,需要遍历所有规格组合。
难点 | 原因 | 对策 |
动态渲染 | 价格通过JS动态加载 | 无头浏览器渲染后提取,或直接请求价格接口 |
多规格SKU | 不同规格价格不同 | 遍历所有SKU规格组合分别采集 |
价格类型多 | 划线价、促销价、到手价并存 | 三种价格同时采集,记录完整价格链 |
反爬严格 | 价格页面高频访问受限 | 短效动态IP高频轮换分散请求 |
库存采集
库存是最难直接获取的维度。大多数平台不公开库存数量,需要从间接信号推断。
库存信号的四种类型:
信号类型 | 页面表现 | 库存判断 |
直接显示 | “仅剩X件” | 精确数量 |
按钮状态 | "立即购买"可点 vs “到货通知” | 有货/无货 |
购物车限购 | 加入购物车提示"限购X件" | 推断库存量级 |
区域差异 | 不同城市显示不同库存 | 用不同城市IP对比采集 |
评论采集
评论是数据量最大、反爬最严的维度。一个热门商品可能有上万条评论,分页可能超过100页。
评论采集的核心挑战:
分页深度大:需要自动翻页,控制频率避免触发反爬接口加密:部分平台评论接口参数有签名验证评论类型多:初始评论、追评、图片评论、视频评论结构不同排序差异:默认排序和时间排序返回不同评论,需要分别采集
代理IP方案
国内电商采集
国内电商平台用短效动态IP,API请求格式:
area指定城市代码(如110100为北京),isp指定运营商,count控制获取IP数量。
海外电商采集
海外电商平台用动态住宅IP,API请求格式:
cnt指定洲代码(AS亚洲、EU欧洲、NA北美),cty指定国家代码(如JP日本、US美国)。
轮换策略
采集维度 | 推荐产品 | 轮换周期 | 单IP频率上限 | 理由 |
商品价格 | 短效动态IP | 1-3分钟 | 5-8次/分钟 | 价格变动快,需高频采集 |
库存状态 | 短效动态IP | 5-10分钟 | 8-12次/分钟 | 库存变动相对慢 |
商品评论 | 短效动态IP | 5-10分钟 | 3-5次/分钟 | 评论接口反爬严,需降速 |
海外平台 | 动态住宅IP | 按会话轮换 | 3-5次/分钟 | 住宅IP信任度高 |
抓取方案设计
价格抓取要点
价格抓取的核心是"拿到正确的数字"。听起来简单,实际操作中有三个坑:
坑一:动态渲染。部分平台的价格通过JavaScript动态加载,requests拿到的HTML里价格位置是空的。两种解法:一是用无头浏览器(Playwright/Selenium)等待页面渲染完成后提取;二是分析页面的AJAX价格接口,直接请求接口拿JSON数据,绕过HTML解析。第二种方式更快更稳定,但需要逆向分析接口逻辑。
坑二:多价格类型。一个商品页面上可能同时出现划线价(原价)、促销价、到手价(优惠券后价格)。只采一个价格会导致数据失真——你以为竞品降价了,其实只是优惠券变了。建议三种价格同时采集,记录完整价格链。
坑三:多规格SKU。同一商品不同规格(颜色、尺寸、配置)价格不同。需要遍历所有SKU规格组合分别采集。部分平台的SKU价格需要点击规格按钮后才动态加载,这种情况下无头浏览器是更可靠的选择。
价格采集核心逻辑:
# 价格采集关键步骤(伪代码) proxy = get_proxy_from_fanproxy(area="110100", isp="电信") response = request_via_proxy(url, proxy) price = extract_price(response, selector=".price-current") # 同时记录划线价、促销价、到手价 prices = { "original": extract_price(response, ".price-original"), "promotion": extract_price(response, ".price-promotion"), "final": extract_price(response, ".price-final") }
库存抓取要点
库存抓取的核心是"从间接信号推断"。大多数平台不直接告诉你库存还剩多少,需要从页面文本中提取线索。
库存信号关键词映射:
库存状态 | 关键词信号 | 判断逻辑 |
有货 | “有货”“现货”"立即购买"可点击 | 按钮可点击=有货 |
低库存 | “仅剩X件”“库存紧张”“少量” | 提取数字即为库存量 |
缺货 | “无货”“缺货”“到货通知” | 按钮不可点击=缺货 |
预售 | “预售”“预定”“X月X日发货” | 区分现货与预售库存 |
多城市库存对比: 部分平台不同城市的库存不同。用API的area参数指定不同城市代码,分别采集同一商品在不同城市的库存状态,可以推断竞品的区域仓储分布。
评论抓取要点
评论抓取是三个维度中最难的,核心挑战是"在反爬限制下采到足够多的评论"。
分页采集策略:
每页采集间隔5-10秒(评论接口反爬最严,必须降速)单IP最多采集2-3页评论后轮换连续2页返回空数据时自动停止(已到末页或被限流)同时采集默认排序和时间排序两种评论
验证码应对:评论采集比价格采集更容易触发验证码。检测到验证码关键词(“验证”“captcha”“人机验证”)时,立即轮换IP并增加延迟。不要尝试自动识别验证码——正确做法是通过IP轮换降低触发频率,从源头减少验证码出现。
评论去重:同一条评论可能在多次采集中重复获取。用评论内容MD5哈希做唯一索引,重复评论直接丢弃。
反爬应对策略
反爬机制与对策
反爬手段 | 触发条件 | 应对方法 |
IP频率限制 | 单IP短时间高频请求 | 代理IP轮换,1-3分钟周期 |
验证码拦截 | 请求模式被识别为自动化 | 降低频率+IP轮换+随机延迟 |
动态渲染 | 价格/库存通过JS加载 | 无头浏览器或直接请求接口 |
行为检测 | 请求间隔过于均匀 | 随机延迟2-8秒+UA池轮换 |
接口加密 | 评论接口参数有签名 | 分析接口逻辑或用浏览器渲染 |
请求行为模拟
反爬系统不只看IP,还看请求模式。三个要点:
随机延迟——请求间隔不要固定。用random.uniform(2.0, 8.0)生成2-8秒随机间隔,模拟真实用户的浏览节奏。
UA池轮换——准备5-10个不同的User-Agent,每次请求随机选一个。固定UA是自动化请求的明显特征。
Referer设置——采集评论时设置Referer为商品详情页URL,模拟从商品页点击进入评论区的真实用户行为。
数据存储与去重
存储结构
数据表 | 核心字段 | 去重规则 |
价格表 | product_id, price, price_type, collected_at | product_id + collected_at 唯一 |
库存表 | product_id, stock_status, stock_quantity, collected_at | product_id + collected_at 唯一 |
评论表 | product_id, content, rating, review_date | content_hash 唯一 |
去重策略
价格去重:同一商品同一时间戳只保留一条记录。如果短时间内多次采集到不同价格,保留最新值(价格确实在变动)。
评论去重:用评论内容MD5哈希做唯一索引。同一条评论在多次采集中重复获取时直接丢弃。
库存去重:同一商品同一时间戳只保留一条记录。库存状态变化时(从"有货"变"缺货")需要记录状态变更时间点。
采集频率建议
数据维度 | 推荐频率 | 理由 |
热销品价格 | 每小时1次 | 价格变动频繁 |
常规品价格 | 每4小时1次 | 价格相对稳定 |
库存状态 | 每2小时1次 | 库存实时变动 |
新品评论 | 每天1次 | 评论持续增长 |
历史评论补采 | 每周1次 | 补采遗漏评论 |
采集成功率监控
监控指标 | 告警阈值 | 处理方法 |
价格采集成功率 | <90% | 检查页面结构是否变更,缩短轮换周期 |
库存采集成功率 | <85% | 检查库存信号关键词是否变更 |
评论采集成功率 | <70% | 降低采集频率,增加IP轮换频率 |
验证码触发率 | >5% | 立即降速,缩短轮换周期至1分钟 |
平均响应时间 | >3秒 | 检查代理IP质量,更换地域 |
常见问题
采集到的价格和实际页面显示不一致怎么办?
大概率是动态渲染问题。部分平台的价格通过JavaScript动态加载,requests拿到的HTML中价格位置是空的。两种解法:一是用无头浏览器等待渲染完成后提取;二是分析AJAX价格接口直接请求JSON数据。
评论采集到第几页就没有数据了?
各平台评论分页深度不同。有些平台第5页之后返回空数据,有些能到50页。建议连续2页返回空数据时自动停止。
采集时频繁遇到验证码怎么办?
说明当前采集频率超过了目标网站的容忍阈值。三个调整方向:一是缩短IP轮换周期(从5分钟降到1-3分钟);二是增加请求间隔随机延迟(从2-5秒增加到5-10秒);三是降低单IP最大请求数(从30次降到15次)。如果调整后仍有验证码,考虑使用隧道代理——云端自动轮换IP,用户无需管理IP列表。
国内电商和海外电商的代理IP怎么选?
国内电商平台用短效动态IP,通过API的area参数指定城市、isp参数指定运营商,3000万+IP池覆盖全国300+城市。海外电商平台用动态住宅IP,通过API的cnt参数指定洲、cty参数指定国家,9000万+真实住宅节点覆盖全球200+国家。注意海外代理仅支持在境外网络环境下使用。
采集竞品数据合法吗?
采集公开页面信息属于合法的市场监测行为。但需注意:遵守目标网站robots协议,控制请求频率不影响目标网站正常运行,采集数据仅用于内部竞品分析,不对外公开或转售。








































