使用JSON接口爬取Shopee商品及评论时如何获取商品URL
核心结论
你不需要额外提取商品URL,第一步返回的JSON中已经包含第二步评论接口所需的shopid和itemid两个核心字段,可直接复用,省去拼接URL再解析的步骤。如果确实需要商品详情页URL,也可以通过固定规则直接拼接生成。
方案1:直接复用shopid和itemid(推荐,效率更高)
修改第一步的遍历代码,额外存储每个商品的shopid和itemid:
titles_list = [] prices_list = [] sold_list = [] ratings_list = [] # 新增两个列表存储评论接口需要的核心参数 shop_id_list = [] item_id_list = [] for item in r['items']: titles_list.append(item['name']) prices_list.append(item['price_min']) sold_list.append(item['historical_sold']) ratings_list.append(item['item_rating']['rating_star']) # 直接提取返回结果里自带的shopid和itemid shop_id_list.append(item['shopid']) item_id_list.append(item['itemid'])
之后第二步爬评论时,直接遍历shop_id_list和item_id_list即可,无需手动填写URL,也不需要做正则匹配提取参数,直接把参数填入评论接口就能正常请求。
方案2:生成商品详情页URL(如果需要存储URL备用)
Shopee新加坡站的商品详情页URL遵循固定规则:https://shopee.sg/[商品名称URL编码]-i.[shopid].[itemid]
其中商品名称编码部分不影响跳转校验,只要i.[shopid].[itemid]部分正确即可正常访问。
拼接URL的代码示例:
from urllib.parse import quote # 新增列表存储商品URL product_url_list = [] for item in r['items']: # 原有提取逻辑不变 titles_list.append(item['name']) prices_list.append(item['price_min']) sold_list.append(item['historical_sold']) ratings_list.append(item['item_rating']['rating_star']) # 拼接标准商品详情页URL encoded_name = quote(item['name']) product_url = f"https://shopee.sg/{encoded_name}-i.{item['shopid']}.{item['itemid']}" product_url_list.append(product_url)
注意事项
- 批量爬取时建议在两次请求之间加1-3秒的延迟,避免触发Shopee的反爬机制返回429错误
- 评论接口的offset最大支持到1000,单商品最多只能爬取1000条公开评论
内容的提问来源于stack exchange,提问作者Donovan Tan
相关产品推荐
相关产品推荐

