使用Python+Beautiful Soup爬取Countdown.co.nz价格及门店切换问题求助
解决Countdown API指定门店价格无效的问题
核心问题排查与解决步骤
1. 必须复用会话(Session)
Countdown的API依赖会话Cookie关联门店设置,所有请求必须复用同一个requests.Session()对象,否则PUT设置的门店ID不会被后续GET请求识别。
示例代码:
import requests # 初始化会话,所有请求共用这个session session = requests.Session() # 配置必要请求头,模拟真实浏览器 session.headers.update({ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36", "Accept": "application/json, text/plain, */*" }) # 先访问首页获取初始会话Cookie session.get("https://www.countdown.co.nz/") # 1. 设置目标门店(PUT请求) set_store_url = "https://www.countdown.co.nz/api/v1/users/me/delivery-address" # 部分场景需补充addressType参数,确认门店类型 payload = {"addressId": "1431761", "addressType": "store"} response = session.put(set_store_url, json=payload) # 验证门店设置是否成功 if response.status_code == 200: print("门店设置成功") else: print(f"门店设置失败:状态码{response.status_code},响应内容{response.text}") # 2. 获取对应门店的商品价格(复用同一session发送GET请求) product_api_url = "https://www.countdown.co.nz/api/v1/products/58643" # stockcode替换为目标商品编码 product_res = session.get(product_api_url) if product_res.status_code == 200: product_data = product_res.json() current_price = product_data["products"][0]["price"]["price"] print(f"当前门店商品价格:${current_price}") else: print(f"获取商品数据失败:状态码{product_res.status_code}")
2. 确认API端点与参数正确性
- 抓包验证设置门店的API端点:通过浏览器开发者工具的"网络"面板,查看前端切换门店时发送的PUT请求,确认端点和payload结构(比如是否需要额外
addressType参数)。 - 检查参数名:部分场景下,门店ID对应的参数可能是
storeId而非addressId,以抓包结果为准。
3. 验证门店设置是否生效
在PUT请求后,调用用户信息接口确认当前选中门店:
user_info_url = "https://www.countdown.co.nz/api/v1/users/me" info_res = session.get(user_info_url) if info_res.status_code == 200: user_data = info_res.json() selected_store = user_data["deliveryAddress"]["store"] print(f"当前生效门店:{selected_store['name']}(ID:{selected_store['id']})")
如果返回的门店与你设置的不一致,说明PUT请求参数或端点有误。
4. 补充必要请求头
Countdown API会校验请求合法性,必须包含的关键头:
User-Agent:模拟真实浏览器,避免被识别为爬虫Accept:指定接受JSON格式Referer:可设置为Countdown商品页面URL,增强请求合法性
常见错误点
- 不要单独使用
requests.get()/requests.put(),必须复用Session,否则Cookie无法共享。 - 无效门店ID会触发服务器自动切换到默认门店,导致价格无变化,需确保使用你提供的有效门店ID。
- API版本可能更新,若上述端点失效,需重新抓包确认最新接口地址。
内容的提问来源于stack exchange,提问作者Chris Norris
相关产品推荐
相关产品推荐

