我想在 Google Play 中查看用户对我的应用的星星投票。有什么解决办法吗?
4 回答
不幸的是,目前没有用于开发人员统计的 API。像Andlyitics这样的应用程序使用屏幕抓取,这就是为什么在控制台发生变化时必须更新它们的原因。
从那里播放商店页面:
请注意,Google 不提供稳定的 API 来获取下载和评分统计信息。因此,如果 Android Market 发生变化,Andlytics 可能无法正常工作。在这种情况下,请耐心等待我们努力赶上变化。
一种方法是从位于 HTML 中的内联 JSON 中解析数据。beautifulsoup
在 Python 中使用、lxml
、requests
库和正则表达式抓取应用程序评论计数和评级的示例方法。
在线 IDE 中的代码和完整示例:
# Super-Mario game is being scraped in this example:
# https://play.google.com/store/apps/details?id=com.nintendo.zara&gl=US
from bs4 import BeautifulSoup
import requests, lxml, re, json
params = {
"id": "com.nintendo.zara", # app name
"hl": "en", # language
"gl": "us" # country
}
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3538.102 Safari/537.36"
}
html = requests.get("https://play.google.com/store/apps/details", params=params, headers=headers, timeout=10)
soup = BeautifulSoup(html.text, "lxml")
# [12] index <script> position is not changing. Other <script> tags position are changing.
# [12] index is a basic app information.
# https://regex101.com/r/DrK0ih/1
basic_app_info = json.loads(re.findall(r"<script nonce=\".*\" type=\"application/ld\+json\">(.*?)</script>", str(soup.select("script")[12]), re.DOTALL)[0])
app_rating = round(float(basic_app_info["aggregateRating"]["ratingValue"]), 1) # 4.287856 -> 4.3
app_reviews = basic_app_info["aggregateRating"]["ratingCount"]
print(app_rating, app_reviews, sep="\n")
# 4.0
# 1619960
将搜索参数创建为字典:
# https://docs.python-requests.org/en/master/user/quickstart/#passing-parameters-in-urls
params = {
"id": "com.nintendo.zara", # app name
"hl": "en", # language
"gl": "us" # country
}
创建标头以充当“真实”用户访问,以便 Google 不会立即将您的请求视为机器人请求:
# https://docs.python-requests.org/en/master/user/quickstart/#custom-headers
headers = {
"User-Agent":
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3538.102 Safari/537.36"
}
发出请求,将params
和传递headers
给请求并创建一个BeautifulSoup
对象,其中 HTML 将被处理和解析:
html = requests.get("https://play.google.com/store/apps/details", params=params, headers=headers, timeout=10)
soup = BeautifulSoup(html.text, "lxml")
查找标签,从所有基本应用信息所在的索引标签中<scprit>
解析出需要的数据,然后通过正则表达式只解析JSON部分:[12]
<scprit>
# https://regex101.com/r/DrK0ih/1
basic_app_info = json.loads(re.findall(r"<script nonce=\".*\" type=\"application/ld\+json\">(.*?)</script>", str(soup.select("script")[12]), re.DOTALL)[0])
json.loads()
将 JSON 字符串转换为 Python 字典。
通过正则表达式从实际 JSON 响应中解析数据比通过 CSS 选择器抓取更安全。CSS 选择器可能会更改,在这种情况下,您必须渲染页面以抓取数据,如果使用浏览器自动化,这将变得很慢。
访问数据并打印:
app_rating = round(float(basic_app_info["aggregateRating"]["ratingValue"]), 1) # 4.287856 -> 4.3
app_reviews = basic_app_info["aggregateRating"]["ratingCount"]
print(app_rating, app_reviews, sep="\n")
# 4.0
# 1619960
如果您想了解如何在 Python 中抓取更多数据,您可以阅读我的 Python博客文章中的Scrape Google Play Store App 中的其余内容。
如果您想使用完整的解决方案,您可以使用免费google-play-scraper
的 Python或google-play-scraper
JavaScript,或者来自 SerpAPI 的Google Play Store API ,这是一个付费 API,具有免费计划,可以为用户处理抓取、绕过阻塞、缩放。
这很简单。转到 Google Play 商店:https://play.google.com/store?hl=en
在顶部栏中搜索您的。如果你找到你的应用程序,你可以看到星星投票。
希望这可以帮助。
去https://play.google.com/store/apps/details?id=
您将在页面右侧和底部找到评分。如果您想查看用户评论。单击描述上方显示的用户评论选项卡