Steam Web API无法获取部分应用用户reviews 问题咨询
解决Steam Web API返回{"success":2}无法获取评论的问题
我之前也踩过这个坑,Steam Web API的success:2官方文档确实没给出明确说明,但根据社区实践和踩坑经验,这个响应码大多和目标应用的API访问限制有关——比如你提到的UFO: Afterlight - Old Version这类旧版本/分支版本应用,Steam可能没有为它们的评论数据开放API接口,或者这些版本的评论没有被API索引到(哪怕社区页面能正常显示)。
下面给你几个可行的解决方案:
1. 确认应用ID是否为主应用ID
很多旧版本/分支版本的应用ID其实是主应用的子分支,你可以查一下UFO: Afterlight的主应用ID,用主ID替换当前的分支ID再调用API试试。比如有些游戏的测试版、旧版本会用独立的子ID,但评论数据其实归属于主应用ID。
2. 直接爬取Steam社区评论页面
既然社区页面能看到评论,那我们可以绕过Web API,直接爬取社区页面的内容。你已经在用Requests和BeautifulSoup,正好可以用上。这里给你一个简单的实现示例:
import requests from bs4 import BeautifulSoup import time def fetch_steam_community_reviews(app_id, max_pages=3): base_url = "https://steamcommunity.com/app/{}/reviews/?p={}&browsefilter=mostrecent&filterLanguage=all" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" } all_reviews = [] for page in range(1, max_pages+1): url = base_url.format(app_id, page) response = requests.get(url, headers=headers) if response.status_code != 200: print(f"请求第{page}页失败,状态码:{response.status_code}") break soup = BeautifulSoup(response.text, "html.parser") review_cards = soup.find_all("div", class_="apphub_Card") if not review_cards: print("没有更多评论了") break for card in review_cards: review_data = {} # 提取评论标题(推荐/不推荐) title = card.find("div", class_="title") review_data["rating"] = title.get_text(strip=True) if title else "未知" # 提取评论内容 content = card.find("div", class_="apphub_CardTextContent") if content: # 移除时间标签,只保留评论正文 date_tag = content.find("div", class_="date_posted") if date_tag: date_tag.extract() review_data["content"] = content.get_text(strip=True, separator=" ") # 提取发布时间 date = card.find("div", class_="date_posted") review_data["date"] = date.get_text(strip=True) if date else "未知" all_reviews.append(review_data) # 加个延迟,避免触发反爬 time.sleep(1) return all_reviews # 调用示例,替换成目标应用的ID target_app_id = "123456" # 替换成UFO: Afterlight - Old Version的实际ID reviews = fetch_steam_community_reviews(target_app_id) for idx, rev in enumerate(reviews, 1): print(f"评论{idx}: {rev['rating']} | {rev['date']}") print(f"内容: {rev['content']}\n")
注意事项:
- 一定要加
User-Agent请求头,否则Steam会直接拒绝请求 - 加入请求延迟(比如
time.sleep(1)),避免触发Steam的反爬机制 - 如果需要获取更多评论,可以调整
max_pages参数,或者判断页面是否还有更多内容
3. 检查API请求参数是否完整
再确认一下你的API请求参数是否正确,比如官方的appreviews接口需要的必要参数:
json=1:指定返回JSON格式filter:可选值recent/updated,控制评论排序language:指定评论语言,比如all获取所有语言评论
比如正确的API请求URL应该类似:
https://store.steampowered.com/appreviews/{appid}?json=1&filter=recent&language=all&num_per_page=20
如果参数缺失,也可能导致返回success:2的错误。
总的来说,success:2本质是API无法返回目标应用的评论数据,对于旧版本/分支版本应用,爬取社区页面是最可靠的替代方案。
内容的提问来源于stack exchange,提问作者alexandredias3d




