Google Playデータ取得 データ取得

Google Playのアプリ情報をPythonで取得する方法|google-play-scraperのapp()を使う

Google Playのアプリページには、タイトル、評価、ジャンル、運営会社、インストール規模など、分析の土台になる公開情報があります。この記事では、Pythonライブラリgoogle-play-scraperapp()を使い、1つのApp IDからアプリ基本情報を取得してCSVへ保存するまでを順番に確認します。

想定読者

  • App IDからアプリ情報を取得したい方
  • 評価・ジャンル・運営会社をPythonで扱いたい方
  • 取得結果をCSVへ保存したい方

google-play-scraperとapp()の位置づけ

google-play-scraperは、Google Playの公開ストア情報を取得するための外部Pythonライブラリです。Googleが提供する公式APIではありません。この記事で使うapp()は、App IDを指定して1つのアプリの詳細情報をdictで返します。

レビュー本文を取得するreviews()や、検索語から候補を探すsearch()とは役割が異なります。まずアプリの基本情報を取得したいときに使う関数です。

この記事のゴール

  • App IDと取得条件を決める
  • app()で公開ストア情報を取得する
  • 必要な項目だけをCSVへ保存する

App ID(Package name)を確認する

App IDは、Androidアプリを識別する文字列です。Google PlayのURLでは、id=の後ろに表示されます。

https://play.google.com/store/apps/details?id=com.nianticlabs.pokemongo

この例のApp IDはcom.nianticlabs.pokemongoです。取得処理では、画面上のアプリ名ではなく、このApp IDを指定します。

ライブラリを準備する

作業用の仮想環境を有効にしてから、google-play-scraperとCSV整理用のpandasをインストールします。

python -m pip install -U google-play-scraper pandas

動作確認に使ったバージョンを残しておくと、将来ライブラリの挙動が変わったときに比較しやすくなります。

python -m pip show google-play-scraper

app()でアプリ情報を取得する

次の順序で少量の取得から始めます。

  1. App IDを1つ決める
  2. langcountryを指定する
  3. 返却されたdictのキーと値を確認する

基本コード

from google_play_scraper import app

app_id = "com.nianticlabs.pokemongo"

result = app(
    app_id,
    lang="ja",
    country="jp",
)

print(result["title"])
print(result["score"])
print(result["genre"])
print(result["url"])

現行ソースの基本シグネチャはapp(app_id, lang="en", country="us")です。langは表示言語、countryはストアの国・地域を指定します。同じApp IDでも、タイトル、価格、通貨、説明などが条件によって変わる場合があります。

dict全体を確認する

最初から特定のキーだけを前提にせず、利用中のバージョンで返るキーを確認します。

print(type(result))
print(sorted(result.keys()))

主な取得項目を確認する

キー内容確認ポイント
appIdApp IDデータ結合用の主キーとして保存
titleアプリ名言語・国によって表示が変わる場合がある
score / ratings / reviews評価と件数取得時点のストア表示値
installs / minInstalls / realInstallsインストール規模フィールドの意味を区別して扱う
developer / developerId運営会社名称とIDを別々に保存
genre / genreIdジャンル表示名と識別子を確認
price / free / currency価格国・地域による違いに注意
released / updated / version公開・更新情報欠損する可能性を考慮
url取得元URL確認・監査用に保存

フィールドはGoogle Play側の表示やライブラリのバージョンに依存します。常に存在すると決めつけず、dict.get()で欠損を許容すると安全です。

pandasで必要列を整理してCSV保存する

ストア値だけでなく、取得日時、App ID、言語、国を同じ行に保存します。これにより、あとで値が変わったときに取得条件を追跡できます。

from datetime import datetime, timezone

import pandas as pd
from google_play_scraper import app

app_id = "com.nianticlabs.pokemongo"
lang = "ja"
country = "jp"

result = app(app_id, lang=lang, country=country)

row = {
    "fetched_at_utc": datetime.now(timezone.utc).isoformat(),
    "app_id": app_id,
    "lang": lang,
    "country": country,
    "title": result.get("title"),
    "developer": result.get("developer"),
    "developer_id": result.get("developerId"),
    "genre": result.get("genre"),
    "genre_id": result.get("genreId"),
    "score": result.get("score"),
    "ratings": result.get("ratings"),
    "reviews": result.get("reviews"),
    "installs": result.get("installs"),
    "min_installs": result.get("minInstalls"),
    "real_installs": result.get("realInstalls"),
    "price": result.get("price"),
    "free": result.get("free"),
    "currency": result.get("currency"),
    "released": result.get("released"),
    "updated": result.get("updated"),
    "version": result.get("version"),
    "url": result.get("url"),
}

df = pd.DataFrame([row])
df.to_csv(
    "google_play_app_details.csv",
    index=False,
    encoding="utf-8-sig",
)

print(df.T)

複数のApp IDを取得する場合も、まず1件でキーと型を確認してから件数を増やします。途中結果を追記保存する設計にすると、失敗時の再実行範囲を小さくできます。

取得に失敗したときの確認

  • App IDに余分な空白やURL全体が入っていないか
  • 対象アプリが指定した国・地域で公開されているか
  • langcountryが想定どおりか
  • 少数の既知App IDでも同じエラーが出るか
  • ライブラリのバージョンとRepositoryのIssueを確認したか

存在しないApp IDや公開範囲外のアプリではNotFoundErrorなどが発生します。大量処理では1件の失敗で全体を止めず、App ID、取得条件、エラー内容を別ログへ残してください。

利用上の注意

  • google-play-scraperはGoogle公式APIではありません。
  • Google Play側の表示や内部仕様の変更により、取得項目や動作が変わる可能性があります。
  • ストア値は時間とともに変化するため、App IDだけでなく取得日時・言語・国も保存します。
  • 多数のApp IDを処理する前に、少量でレスポンス構造と保存形式を確認します。
  • 利用規約、対象アプリの公開範囲、必要最小限のリクエストを確認して利用してください。

次に読む記事

基本情報を取得できたら、レビュー取得や検索結果の集計へ進めます。

-Google Playデータ取得, データ取得