使用google-play-scraper无法抓取全部Google Play应用评论求助
问题分析与解决方案
核心差异确认
首先你已经注意到:Google Play官网显示的总数包含无文字的纯评分,而google-play-scraper默认只抓取带文字内容的评论,这是数量差异的主要来源之一。但除此之外,还有以下关键原因导致抓取量不足:
其他导致数量差异的原因
- Google Play的抓取限制:Google对公开评论接口的单次请求返回量、短时间内请求频率都有阈值限制,不会一次性返回所有带文字评论,哪怕设置了区域和语言参数也无法绕过。
- 分页未完整遍历:默认调用
reviews方法时,count参数默认值较小(通常为100),且不会自动遍历所有分页。仅调用一次只能获取第一页评论。 - 区域数据误差:部分评论的区域标记可能不准确,或是Google Play的区域数据存在更新延迟,导致scraper无法获取到所有德国区的带文字评论。
解决方法
1. 循环分页抓取所有带文字评论
使用continuationToken参数遍历所有分页,直到没有更多数据返回。示例代码(Node.js环境):
const gplay = require('google-play-scraper'); async function fetchAllReviews(appId) { let allReviews = []; let nextToken = null; do { const response = await gplay.reviews({ appId: appId, lang: 'de', country: 'de', sort: gplay.sort.NEWEST, count: 200, // 设置单次请求最大返回量 continuationToken: nextToken }); allReviews = [...allReviews, ...response.data]; nextToken = response.continuationToken; // 添加随机延迟避免触发反爬 await new Promise(resolve => setTimeout(resolve, Math.random() * 1000 + 500)); } while (nextToken); return allReviews; } // 调用示例 fetchAllReviews('de.flaschenpost.app') .then(reviews => console.log(`最终抓取到带文字评论数:${reviews.length}`)) .catch(err => console.error(err));
2. 验证官网实际带文字评论数
打开Google Play官网对应应用的评论区,切换到「所有评论」,查看页面标注的带文字评论数(通常显示为“X条带文字的评论”),和最终抓取数量对比:
- 若两者接近,剩余差异就是无文字纯评分,属于正常情况;
- 若仍有较大差距,说明触发了反爬限制,需调整请求频率或模拟真实设备请求。
3. 优化请求规避反爬
- 添加随机延迟(如上例中的
setTimeout),避免短时间高频请求; - 配置
userAgent参数模拟移动设备请求头,比如:gplay.reviews({ // 其他参数... userAgent: 'Mozilla/5.0 (Linux; Android 13; SM-G998B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36' })
内容的提问来源于stack exchange,提问作者sternenklar
相关产品推荐
相关产品推荐

