Tony Wang5 分で読めます2026年版 Steamスクレイピング完全ガイド(レビュー・チャート・プレイヤー数)
2026年版Steamスクレイピングガイド。ストア詳細・レビュー・同時接続プレイヤー数・ランキングを、3つの別々のAPIを自前で統合するか、1つの正規化されたAPIで取得するかを解説します。
なぜSteamをスクレイピングするのか
Steamのデータは、PCゲーム市場のリサーチやプロダクトの基盤になります。
- 市場・競合リサーチ — ジャンルや競合タイトルのレビュースコア、価格、タグを追跡。
- ライブランキングとトレンド検出 — 同時接続プレイヤー数や最多プレイ・売上トップのチャートの動きを監視。
- レビュー・感情分析 — プレイヤーが実際に何を言っているか、パッチやセール後に感情がどう変化するかを読み取る。
- 所有者数・市場規模の推定 — SteamSpyのサンプリングされた所有者数は、公開されている中で最も「何人が所有しているか」に近い数字です。
Steamをスクレイピングするのは合法か
方法1:3つの別々のデータソースを自前で統合する
Steamには統合された単一のAPIが存在せず、結局3つを組み合わせることになります。
import requests
# 1. ストア詳細 — 非公開だが安定しており、appidをキーに取得
app = requests.get("https://store.steampowered.com/api/appdetails", params={"appids": 570}).json()
# 2. コミュニティレビュー — 別のホスト、別のレスポンス形式、カーソル方式のページネーション
reviews = requests.get("https://store.steampowered.com/appreviews/570", params={
"json": 1, "filter": "recent", "language": "japanese", "cursor": "*",
}).json()
# 3. SteamSpy — さらに別のホスト。所有者数の推定に使う
spy = requests.get("https://steamspy.com/api.php", params={"request": "appdetails", "appid": 570}).json()
本当のコストは、アンチボット対策ではなく、この3つを統合する作業そのものです。
- 単一のスキーマが存在しない。
appdetailsは価格・ジャンル・対応プラットフォームをsuccess/dataのラッパーの下にネストして返し、appreviewsはフラットなリストをcursor付きで返す(次のページを取得するにはこのカーソルを往復させる必要があります)。SteamSpyはさらに別の形式で、ownersフィールドがテキストの範囲("1,000,000 .. 2,000,000")として返り、数値ではありません。この3つを1つのレコードに正規化する作業が、実質的な作業のほとんどを占めます。 - SteamSpyはサンプリングされた非公式の推定値です。 公開されているSteamプロフィールのサンプルから所有状況を推定しているため、マイナータイトルや発売直後のタイトルでは、数値が古かったり、欠落していたり、存在しないことがあります。数値がnullになる前提で実装してください。
- レビューは番号ではなく不透明なカーソルでページングされます。 呼び出し間で
cursor文字列を保持する必要があり、「5ページ目をください」のような近道はありません。途中で中断した取得を再開するには、最後のカーソルを保存しておく必要があります。 - ライブのプレイヤー数とチャートはまた別のエンドポイントです(1つのアプリの現在のプレイヤー数には
ISteamUserStats/GetNumberOfCurrentPlayers、ランキングには公開のチャートページ)。それぞれに癖があり、安定した公開契約として文書化されているものはありません。
方法2:ノーコードツール
汎用のスクレイピングツールは個々のストアページやレビューページを取得できますが、Steamのデータは本質的に複数ソースにまたがっています。1つのページ形式向けに作られたノーコードツールでは、ストア詳細・レビュー・ライブプレイヤー数・SteamSpyの推定値を1つのレコードに結合する、という実質的な作業の大半を助けてくれません。
方法3:構造化されたSteam API
Steamスクレイピング API は、この3つのソースに加えて公式チャートも1つのキーの背後で正規化するため、アプリ詳細・レビュー・ランキングを同じクライアント・同じレスポンス形式で扱えます。
タイトルでストアを検索:
curl "https://api.crawlora.net/api/v1/steam/search?term=hollow%20knight" \
-H "x-api-key: $CRAWLORA_API_KEY"
1つのアプリのストア詳細とレビューをPythonで取得:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/steam"
app = requests.get(f"{base}/app", headers=h, params={"appid": 570}).json()["data"]
reviews = requests.get(f"{base}/reviews", headers=h, params={
"appid": 570, "filter": "recent", "language": "japanese", "num_per_page": 50,
}).json()["data"]
players = requests.get(f"{base}/players", headers=h, params={"appid": 570}).json()["data"]
ライブチャートで値動きとランキングを取得:
concurrent = requests.get(f"{base}/charts/concurrent", headers=h).json()["data"]
most_played = requests.get(f"{base}/charts/most-played", headers=h).json()["data"]
reviews は filter(recent/updated/all)、review_type、purchase_type、ページング用の cursor を受け付けます。カーソルの往復処理はエンドポイント側で吸収されるため、通常のリストと同じ感覚でページングできます。charts/concurrent と charts/most-played はどちらも任意の enrich フラグを受け付け、各ランキング行に単なるappidではなくストアのメタデータ(名前、価格、ジャンル)を付与できるため、行ごとに app を追加で呼ぶ必要がありません。
取得できるデータ
ストア詳細(名前、価格、ジャンル、対応プラットフォーム、発売日、レビュー概要)、個々のレビュー(投稿者、プレイ時間、おすすめ/非おすすめ、本文、投稿日時)、現在の同時接続プレイヤー数、ライブチャート(同時接続、最多プレイ、売上トップ)、ニュース投稿、コミュニティタグ — appid を軸に、アプリ・レビュー・チャート行ごとに1つのエンリッチ済みレコードとして取得できます。
制約とよくある課題
- 統一された公式スキーマが存在しない。 ストアAPI、レビュー、SteamSpyはそれぞれ独自のレスポンス形式を持ち、いずれも正式にバージョン管理されたドキュメントではありません。単なるパースではなく、正規化作業が前提になります。
- SteamSpyは推定であり、実測ではない。 所有者数は、特にマイナータイトルや発売直後のタイトルについては、正確な販売数ではなく方向性を示す市場規模のシグナルとして扱ってください。
- レビューはカーソルでページングされる。 中断した取得を再開するにはカーソルを保存してください。ページ番号による近道はありません。
- チャートは頻繁に動く。 同時接続・最多プレイのランキングは絶えず変化します。時系列データが必要な場合は、1回の取得ではなくスケジュールに沿ったスナップショット取得を行ってください。
活用例
- アプリインテリジェンス — PCゲームを含むアプリ市場を、評価・価格・ランキングの観点で追跡。アプリインテリジェンス製品ページを参照。
- 競合・市場リサーチ — 比較対象タイトルに対してレビュースコアやプレイヤー数をベンチマーク。競合トラッキングを参照。
- Steam GamesデータセットとSteam Chartsデータセット — クロールを実行することなく、同じデータをあらかじめ収集・検索可能な形で提供。
出典
収集を始める
まずは無料で試す: Free Web Scraperで任意の公開URLを実行するか、Anti-Bot Checkerでサイトがボットをブロックしているか確認できます — サインアップ不要です。
アプリとレビューの各エンドポイントをPlaygroundでテストし、APIドキュメントでスキーマを確認し、料金を確認してください。Steamは3つのストアにまたがる市場の一角にすぎません。Google Playのスクレイピング方法はAndroidのカタログ、掲載情報、評価を、App Storeレビューのスクレイピング方法はiOSのレビューの流れを扱っています — 同じタイトルが3つすべてに出ていることも多く、スコアが一致することはめったにありません。同じゲームカタログのコンソール側については、PlayStation Storeのスクレイピング方法が同じタイトルの価格、エディション、セール情報を扱っています。より広いツールキットについてはウェブスクレイピングAPIの選び方を、法的な基本事項についてはウェブスクレイピングは合法かを参照してください。
よくある質問
Steamをスクレイピングするのは合法ですか?
ストアAPIとレビューは公開されている認証不要のエンドポイントで、回避すべきログイン壁もなく、Valveはこれらの利用にAPIキーを要求していません。価格やレビュースコアのような事実は著作権の対象になりませんが、ストアの説明文やスクリーンショットは著作物になり得るため、そのまま再掲載しないでください。レート制限を尊重してください。
Steamには統合された公式APIが1つあるのですか?
いいえ。データはストアAPI(アプリ詳細)、コミュニティレビューAPI、そして非公式のSteamSpy(所有者数の推定)に分散しており、それぞれ異なるレスポンス形式と異なるホストを持ちます。ライブのプレイヤー数やチャートも別のエンドポイントです。
SteamSpyの所有者数はどの程度正確ですか?
サンプリングされた公開APIから推定された値であり、正確な販売数ではありません。マイナータイトルや発売直後のタイトルでは数値が遅延したり欠落したりすることがあるため、方向性の指標として扱ってください。
Steamのレビューはどのようにページングされますか?
ページ番号ではなく、不透明なカーソル文字列によってページングされます。次のページを取得するには、呼び出し間でカーソルを保持しておく必要があります。
ブラウザを動かさずにSteamから取得できるものは何ですか?
ストア詳細、レビュー、現在のプレイヤー数、公式チャートはすべて通常のHTTP JSONエンドポイントであり、いずれもヘッドレスブラウザやJavaScriptレンダリングは不要です。