Python爬取Google Play应用评论返回空列表,请求错误排查
解决Google Play评论爬取返回空列表的问题
问题根源分析
你的代码返回空列表主要有三个核心原因:
- 动态加载限制:Google Play的评论内容通过JavaScript动态渲染,
requests.get()仅能获取初始HTML骨架,无法拿到实际加载的评论数据。 - DOM结构变更:代码中依赖的
single-review、review-body等CSS类名,当前Google Play页面结构已更新,这些类名不再存在。 - 反爬拦截:直接用
requests发起请求易被Google反爬机制识别,返回内容可能被限制或缺失。
解决方案
方案1:使用Selenium动态渲染页面
通过模拟浏览器访问,等待页面加载完成后提取评论,解决动态加载问题:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time # 初始化Chrome浏览器(需提前下载对应版本的chromedriver) driver = webdriver.Chrome() target_url = 'https://play.google.com/store/apps/details?id=com.example.app&reviewSortOrder=4&reviewType=0' driver.get(target_url) # 滚动页面加载更多评论(可根据需求调整滚动次数) for _ in range(3): driver.execute_script('window.scrollTo(0, document.body.scrollHeight);') time.sleep(2) # 等待评论加载 # 等待评论元素加载完成 wait = WebDriverWait(driver, 10) review_containers = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, 'div.RHo1pe'))) reviews_list = [] for container in review_containers: # 提取评论者名称 reviewer_name = container.find_element(By.CSS_SELECTOR, 'div.X5PpBb').text # 提取评分 rating_label = container.find_element(By.CSS_SELECTOR, 'div.iXRFPc').get_attribute('aria-label') review_rating = rating_label.split(' ')[1] # 处理展开更多评论的情况 try: expand_btn = container.find_element(By.CSS_SELECTOR, 'button.VfPpkd-Bz112c-LgbsSe.yHy1rc.eT1oJ.mN1ivc') expand_btn.click() time.sleep(0.5) except: pass # 提取评论内容 review_text = container.find_element(By.CSS_SELECTOR, 'div.h3YV2d').text reviews_list.append({ 'reviewer_name': reviewer_name, 'review_rating': review_rating, 'review_text': review_text }) driver.quit() print(reviews_list)
注意事项:
- 需下载与浏览器版本匹配的驱动(如Chrome的
chromedriver),确保路径配置正确。 - 可调整滚动次数和等待时间,加载更多历史评论。
方案2:使用Google Play Developer API(推荐)
作为应用开发者,官方API是获取评论最稳定、合法的方式,无需处理页面结构变化和反爬问题:
from google.oauth2 import service_account from googleapiclient.discovery import build # 替换为你的服务账号密钥文件路径 SERVICE_ACCOUNT_JSON = 'your-service-account-key.json' APP_PACKAGE = 'com.example.app' # 初始化API客户端 credentials = service_account.Credentials.from_service_account_file( SERVICE_ACCOUNT_JSON, scopes=['https://www.googleapis.com/auth/playstore'] ) android_publisher = build('androidpublisher', 'v3', credentials=credentials) # 分页获取所有评论 reviews_list = [] request = android_publisher.reviews().list(packageName=APP_PACKAGE) while request is not None: response = request.execute() for review in response.get('reviews', []): # 提取评论核心信息 comment_content = review.get('comments', [{}])[0].get('userComment', {}) reviews_list.append({ 'reviewer_name': review['authorName'], 'review_rating': review['starRating'], 'review_text': comment_content.get('text', '') }) # 获取下一页评论 request = android_publisher.reviews().list_next(request, response) print(reviews_list)
前置步骤:
- 登录Google Cloud Console创建项目,启用「Google Play Developer API」。
- 配置服务账号权限,关联到你的Google Play开发者账号,下载密钥JSON文件。
内容的提问来源于stack exchange,提问作者Tushar Patki
相关产品推荐
相关产品推荐

