如何高效爬取Google Play商店所有应用的全量评论?
如何高效爬取Google Play应用的全量评论?
嘿,我来帮你解决这个问题!你之前用urllib+BeautifulSoup直接爬静态页面的方式行不通,因为Google Play的评论是动态加载的——点击“下一页”时,页面通过AJAX请求拉取新数据,初始HTML里只有第一页的内容。下面给你几个高效的解决方案,按推荐程度排序:
1. 优先使用Google Play官方API(最合规高效)
Google提供了官方的Google Play Developer API,其中的Reviews模块可以直接获取全量评论,完全不用处理动态加载和反爬问题,这是最推荐的方式。
- 步骤:
- 前往Google Cloud Console创建项目,启用Google Play Developer API,获取API密钥或OAuth 2.0凭据。
- 调用
reviews.list接口,指定应用包名就能分页获取所有评论,还能按评分、语言过滤。
- 示例代码(用
google-api-python-client库):from googleapiclient.discovery import build # 替换成你的API密钥 API_KEY = "YOUR_API_KEY" package_name = "com.google.android.youtube.tv" # 初始化API服务 service = build('androidpublisher', 'v3', developerKey=API_KEY) request = service.reviews().list(packageName=package_name) all_reviews = [] # 循环获取所有分页的评论 while request is not None: response = request.execute() all_reviews.extend(response.get('reviews', [])) request = service.reviews().list_next(request, response) # 处理并打印评论 for review in all_reviews: print(f"作者:{review['authorName']}\n评论:{review['content']}\n---") - 优点:合法合规、数据准确、无需处理反爬,效率拉满。
2. 模拟动态AJAX请求(适合不想用API的场景)
如果不想走官方API,你可以模拟浏览器点击“下一页”时的AJAX请求:
- 先打开浏览器开发者工具(F12),点击“下一页”,观察Network面板的XHR请求,会发现Google Play向
https://play.google.com/store/getreviews发送POST请求加载更多评论,需要携带应用ID、语言、分页编号等参数。 - 注意要设置真实的请求头(比如
User-Agent),避免被反爬拦截,必要时可以加延迟或用代理。 - 示例代码(用
requests+BeautifulSoup):import requests from bs4 import BeautifulSoup import json package_name = "com.google.android.youtube.tv" base_url = "https://play.google.com/store/getreviews" # 替换成你的浏览器User-Agent headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" } params = { "id": package_name, "hl": "en", "reviewSortOrder": "0", "pageNum": "0" } all_reviews = [] while True: response = requests.post(base_url, headers=headers, data=params) # Google返回的内容被JS包裹,需要提取JSON部分 raw_data = response.text.split(")]}'")[1] data = json.loads(raw_data) reviews_html = data[0][2] soup = BeautifulSoup(reviews_html, 'html.parser') review_items = soup.find_all('div', class_='RHo1pe') if not review_items: break # 没有更多评论了 for item in review_items: author = item.find('div', class_='X5PpBb').text content = item.find('div', class_='h3YV2d').text all_reviews.append({"作者": author, "评论": content}) # 更新分页编号,获取下一页 params["pageNum"] = str(int(params["pageNum"]) + 1) - 注意:这种方法可能会被Google的反爬机制拦截,需要随时调整请求参数,而且违反Google服务条款的风险更高。
3. 使用第三方封装库(简化开发)
有一些第三方库已经封装了Google Play评论的爬取逻辑,比如google-play-scraper,不用自己写请求和解析代码:
- 先安装库:
pip install google-play-scraper - 示例代码:
from google_play_scraper import reviews, Sort package_name = "com.google.android.youtube.tv" # 先获取第一波评论和续页令牌 all_reviews, continuation_token = reviews( package_name, lang='en', country='us', sort=Sort.NEWEST, count=100 # 每次获取的评论数量 ) # 循环获取剩余评论 while continuation_token: batch, continuation_token = reviews( package_name, lang='en', country='us', sort=Sort.NEWEST, count=100, continuation_token=continuation_token ) all_reviews.extend(batch) # 处理评论 for review in all_reviews: print(f"作者:{review['userName']}\n评论:{review['content']}\n---") - 优点:开发速度快,不用关心底层实现;缺点:第三方库可能维护不及时,同样有触发反爬的风险。
最后提醒
- 遵守Google Play的服务条款,不要过度频繁爬取,避免IP被封禁。
- 商业用途优先选择官方API,避免法律风险。
- 动态爬取时,尽量模拟真实用户行为,比如添加随机延迟、切换User-Agent、使用代理池。
内容的提问来源于stack exchange,提问作者Hello lad
相关产品推荐
相关产品推荐

