如何抓取Vivino平台同一款葡萄酒的全部可用年份对比数据
Vivino同酒款全年份数据抓取方案
你当前使用的/api/explore/explore接口仅返回搜索匹配的单一年份条目,本身不包含同酒款其他年份数据,可按以下步骤获取全年份对比数据:
- 从现有搜索接口返回结果中提取目标酒款的唯一ID,对应字段路径为
t["vintage"]["wine"]["id"],也可直接从酒款详情页URL的/w/后的数字段获取 - 调用酒款专属API接口
https://www.vivino.com/api/wines/{替换为实际酒款ID},请求头保持和你现有代码的UA一致即可,无需额外登录凭证 - 解析该接口返回的JSON数据,其中
vintages数组包含该酒款所有公开的年份数据,涵盖年份值、评分、评价数、对应价格等全量对比字段
参考实现代码:
import requests import pandas as pd import time # 替换为你要查询的酒款ID wine_id = 73846 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0" } # 控制请求频率避免触发反爬 time.sleep(1) r = requests.get( f"https://www.vivino.com/api/wines/{wine_id}", headers=headers, params={ "country_code": "DK", "currency_code": "DKK" } ) # 提取所有年份数据生成结构化表 vintage_list = r.json()["vintages"] results = [ ( v["wine"]["winery"]["name"], v["wine"]["name"], v["year"], v["statistics"]["ratings_average"], v["statistics"]["ratings_count"], v["price"]["amount"] if v.get("price") else None ) for v in vintage_list ] df = pd.DataFrame(results, columns=["酒庄", "酒款名称", "年份", "评分", "评价数", "价格"]) print(df)
注意事项:请求频率建议控制在1次/秒以上,避免触发平台反爬机制导致IP被临时限制。
内容的提问来源于stack exchange,提问作者Malte Jensen
相关产品推荐
相关产品推荐

