Як зібрати дані Google Play Store на Python

Два шляхи: пакет google-play-scraper з відкритим кодом для дрібних задач і API для всього, що має працювати щодня.

Шлях 1: бібліотека для парсингу

Пакет з відкритим кодом google-play-scraper завантажує сторінку магазину і розбирає її:

pip install google-play-scraper

from google_play_scraper import app
d = app("com.whatsapp", lang="en", country="us")
print(d["title"], d["installs"], d["score"])

Для блокнота він чудовий. У продакшені ви зіткнетеся з трьома проблемами: обмеження частоти (Google відповідає 429 і капчами, щойно ви надсилаєте багато запитів з однієї IP), зміни розмітки (парсери ламаються без попередження) і пам'ять (коли застосунок видалено, сторінки немає — а з нею і даних).

Шлях 2: запитати індекс, який уже зібрано

import os, requests

r = requests.get("https://apiplay.cc/api/v1/app",
                 params={"id": "com.whatsapp"},
                 headers={"X-API-Key": os.environ["API_KEY"]}, timeout=30)
app = r.json()["app"]
print(app["title"], app["installs"]["label"], app["rating"]["score"])

Ті самі поля, без проксі. Видалені застосунки теж відповідають, із встановленим status.removed.

Збір цілої категорії

Замість обходу сторінок категорій — фільтруйте:

params = {"category": "GAME_PUZZLE", "min_installs": 100000, "per": 100, "page": 1}
r = requests.get("https://apiplay.cc/api/v1/search", params=params, headers=H).json()
for a in r["results"]:
    print(a["id"], a["installs"]["min"], a["rating"]["score"])

Перебирайте page до r["pages"]. Кожна сторінка до 100 застосунків коштує 2 кредити.

Що обрати