Tony Wang6 分で読めます2026年版 Apple Booksをスクレイピングする方法(API & Python)
Apple Booksの電子書籍とオーディオブックを2026年にスクレイピングする方法。検索・詳細・レビュー・類似タイトル・シリーズ・チャートをDIY、ノーコード、構造化APIで取得。
2026年に Apple Books をスクレイピングする最も手早い方法は、Apple のページを自分でパースするのではなく、正規化された JSON を返す構造化 API を呼び出すことです。これはストアの電子書籍側とオーディオブック側の両方をカバーします。Apple Books は書籍とオーディオブックという2つの並行したカタログを、それぞれ独自の id、シリーズ、レビューとともに持っており、Apple にはサードパーティのカタログ調査向けに作られた現代的な開発者 API がありません。このガイドでは DIY、ノーコード、そして両方のカタログを扱える構造化 API を取り上げ、あわせて法的な現実についても最初に解説します。
なぜ Apple Books をスクレイピングするのか?
Apple Books は最大級の電子書籍・オーディオブックストアのひとつであり、次のような用途を支えます。
- カタログ強化 — 正規のタイトル、著者、価格、ISBN、評価データを読書アプリ、比較ツール、社内データセットに紐付けられます。
- 電子書籍 vs. オーディオブックの価格リサーチ — 同じタイトルについて、両方のカタログにまたがる価格とフォーマットの提供状況を比較できます。
- 反響リサーチ — リリース後にタイトルの評価と評価分布がどう動くかを追跡できます。
- シリーズ・著者トラッキング — シリーズの完全な読書順や、著者のフォーマット横断のバイブリオグラフィーを追えます。
- チャート・ベストセラーの監視 — 電子書籍とオーディオブックで何がトレンドかをカテゴリーチャートで確認できます。
Apple Books をスクレイピングするのは合法か?
選択肢1: Python で DIY する(そしてなぜ破綻するか)
DIY のアプローチは、レート制限のある iTunes Search API を呼び出すか、Apple Books のサーバーレンダリングされた書籍・オーディオブックページを直接パースするかのどちらかを意味します。
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://books.apple.com/us/book/harry-potter-and-the-sorcerers-stone-enhanced-edition/id1037193578",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Rating, price, and description live in embedded JSON that shifts
# across Apple's storefront redesigns — and reviews load separately
デモは動きますが、その後破綻します。
- 2つのカタログ、2つの id 空間。 書籍とオーディオブックは別々の id、シリーズ、レビュースレッドを持つ別々のオブジェクトです。両フォーマットで提供されているタイトルは、1回ではなく2回のルックアップが必要です。
- iTunes Search API だけでは不十分。 おおよそ20コール/分に制限されており、書籍・オーディオブックのペイロードは実際のストアフロントページが示す内容より薄いです(レビューなし、類似タイトルなし、オーディオブックの再生時間のようなフィールドの欠落)。
robots.txtが主要なパスをブロックしている。books.apple.com/robots.txtはすべてのクローラーに対して/WebObjects/*と/v1/catalog/*を禁止しています。- レビュー、類似タイトル、シリーズはそれぞれ個別にページングまたはロードされる。 完全なタイトルレコードを得るには、1回のページロードではなく複数回のリクエストが必要です。
選択肢2: ノーコードツール
一部のノーコードスクレイパーマーケットプレイスやブラウザ拡張機能は、単発のエクスポート向けに Apple Books や iTunes ストアフロントの既製テンプレートを提供しています。手作業で数タイトルを取得するには十分ですが、2つのカタログに対して同時にスケジュール実行するのは扱いにくく、クリーンな電子書籍/オーディオブックのデータ契約を提供せず、同じページをスクレイピングしている以上、DIY スクリプトと同じ利用規約上のリスクを抱えます。
選択肢3: 構造化された Apple Books API
繰り返し実行でき、権限の範囲が明確なワークフローには、Apple Books スクレイピング API が両方のカタログにまたがる正規化された JSON を返し、メンテナンスすべきページパースはありません。検索はデフォルトで電子書籍をカバーし、オーディオブックには並行した検索エンドポイントがあります。
curl "https://api.crawlora.net/api/v1/apple-books/search?term=harry+potter&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"
curl "https://api.crawlora.net/api/v1/apple-books/audiobook/search?term=harry+potter&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"
続いて id を解決し、Python で詳細、レビュー、類似タイトルを取得します。書籍とオーディオブックで同じ形です。
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/apple-books"
book_hits = requests.get(f"{base}/search", headers=h, params={"term": "harry potter"}).json()["data"]
book_id = book_hits[0]["id"]
book = requests.get(f"{base}/book/{book_id}", headers=h).json()["data"]
book_reviews = requests.get(f"{base}/book/{book_id}/reviews", headers=h, params={"limit": 20}).json()["data"]
audio_hits = requests.get(f"{base}/audiobook/search", headers=h, params={"term": "harry potter"}).json()["data"]
audiobook_id = audio_hits[0]["id"]
audiobook = requests.get(f"{base}/audiobook/{audiobook_id}", headers=h).json()["data"]
書籍詳細は正規化された JSON です(実際のフィールド。ドキュメントを確認してください)。
{
"code": 200,
"msg": "OK",
"data": {
"id": 1037193578,
"name": "Harry Potter and the Sorcerer's Stone (Enhanced Edition)",
"url": "https://books.apple.com/us/book/harry-potter-and-the-sorcerers-stone-enhanced-edition/id1037193578",
"artist_id": 79595314,
"artist_name": "J.K. Rowling",
"genres": ["Fiction & Literature", "Fantasy"],
"isbn": "9781781105849",
"publisher": "Pottermore Publishing",
"page_count": 309,
"release_date": "2015-11-20T08:00:00Z",
"price": 11.99,
"currency": "USD",
"rating": 4.7,
"rating_count": 10686,
"rating_histogram": { "1": 348, "2": 211, "3": 339, "4": 934, "5": 8854 },
"series_id": 1044374793,
"series_name": "The Harry Potter Series",
"series_sequence": "1"
}
}
同じタイトルのオーディオブックは、並行した形に加えてナレーターと再生時間を返します。
{
"code": 200,
"msg": "OK",
"data": {
"id": 1442174040,
"name": "Harry Potter and the Sorcerer's Stone",
"url": "https://books.apple.com/us/audiobook/harry-potter-and-the-sorcerers-stone/id1442174040",
"artist_id": 79595314,
"artist_name": "J.K. Rowling",
"narrator": "Jim Dale",
"duration_seconds": 29898,
"provider": "Pottermore Publishing",
"price": 25.99,
"currency": "USD",
"rating": 4.5,
"rating_count": 10639,
"series_id": 6442645726,
"series_name": "The Harry Potter Series",
"book_id": 1037193578
}
}
book_id / series_id の相互参照に注目してください。オーディオブックのレコードは、対応する電子書籍と、そのオーディオブック自身のシリーズの両方にリンクしています。/apple-books/series/{id}(電子書籍シリーズ)と /apple-books/audiobook-series/{id} は別々のエンドポイントだからです。/apple-books/book/{id}/similar、/apple-books/audiobook/{id}/similar、/apple-books/author/{id}、そして(collection と genre フィルター付きの)/apple-books/charts がこのパターンを補完します。id またはクエリを入れれば、正規化された JSON が返ってきます。書籍(またはオーディオブック、レビュー)1件につき1行を保存し、スケジュールを組んで再実行しましょう。
収集できるもの
両フォーマットにまたがる公開カタログおよびレビューのメタデータです。検索結果(id、タイトル、著者、ジャンル、価格、評価)、書籍詳細(説明、ISBN、出版社、ページ数、対象読者、シリーズ、評価分布)、オーディオブック詳細(ナレーター、再生時間、プロバイダー、シリーズ、紐付けられた book_id)、書籍とオーディオブックのページング可能なカスタマーレビュー(評価、タイトル、本文、レビュアー名、日付)、書籍とオーディオブックの類似タイトル、著者プロフィール(略歴、ジャンル、書籍とオーディオブックの一覧)、電子書籍シリーズとオーディオブックシリーズの一覧、そしてコレクションとジャンル別のチャート順位です。あくまで公開データのみで、購入済みライブラリ、アカウント、DRM 保護されたファイルの中身は含みません。
制約とよくある課題
- カタログ調査向けの現代的な開発者 API がない。 レガシーな iTunes Search API は存在しますが、レート制限があり、オーディオブックの再生時間やレビューといったフィールドで実際のストアフロントより薄いです。
- 利用規約が自動アクセスを明示的に制限している。 プロジェクトの範囲を公開されているカタログとレビューページに限定し、
robots.txtで禁止されたパスを避け、レビュー全文を大量に再公開しないでください。 - 2つの並行したカタログ。 書籍とオーディオブックは別々の id、シリーズ、レビュースレッドを持ちます。両フォーマットで提供されているタイトルは、1回ではなく2回の完全なルックアップが必要です。
- タイトルごとのファンアウト。 レビューと類似タイトルはそれぞれ個別にロードされるため、完全なタイトルレコードを得るには複数回の呼び出しが必要です。
- レビューに含まれる個人データ。 レビュアー名と本文は GDPR/CCPA のもとで個人データにあたります。必要な分だけ収集し、それに応じて扱ってください。
どこで使われるか
- 読書・リスニングアプリのカタログ — 正規のタイトル、価格、評価データを発見・比較プロダクトに紐付けられます。
- フォーマット別価格リサーチ — 同じタイトルについて、電子書籍とオーディオブックの価格・提供状況を比較できます。
- 出版・反響リサーチ — 発売時、シリーズ完結時、あるいはメディアタイアップの時期に、タイトルの評価トレンドを追跡できます。
出典
収集を始める
まずは無料でお試しください: 任意の公開 URL を無料ウェブスクレイパーに通すか、アンチボットチェッカーでサイトがボットをブロックするかどうかを確認できます。サインアップ不要です。
検索、書籍、オーディオブックのエンドポイントをプレイグラウンドで試し、API ドキュメントでスキーマを確認し、料金をご覧ください。Apple Books は書籍という同じ縦断領域のストアフロント/コマース側であり、カタログ、価格、チャートを扱います。Goodreads は同じ書籍の縦断領域のコミュニティ/レビュー側なので、両方を組み合わせればカタログと読者の反応の両方が得られます。すでに Apple の他の iTunes ルックアップ系カタログを扱っているなら、Apple Podcasts のスクレイピング方法が番組とエピソード向けに同じ「id を入れれば JSON が返る」パターンを解説しています。あわせてウェブスクレイピング API の選び方とウェブスクレイピングは合法かもご覧ください。
よくある質問
Apple Books をスクレイピングするにはどうすればよいですか?
検索語または Apple Books の id を Crawlora の Apple Books エンドポイントに送ると、電子書籍とオーディオブックのカタログ、レビュー、チャートデータが構造化された JSON として返ってきます。Apple ID やアプリ登録は不要です。公開データを収集し、Apple の利用規約を尊重してください。
Apple Books の公開 API はありますか?
サードパーティのカタログ調査向けの現代的な API はありません。レガシーな iTunes Search API は書籍とオーディオブックをカバーしますが、おおよそ20コール/分にレート制限されており、実際のストアフロントをスクレイピングすれば得られるオーディオブックの再生時間のようなフィールドが欠けています。
同じタイトルの電子書籍とオーディオブックの両方のデータを取得できますか?
はい。書籍とオーディオブックは別々の id 空間で、並行したエンドポイント(/apple-books/book/{id} と /apple-books/audiobook/{id})を持ちます。オーディオブックのレコードには、対応する電子書籍への book_id の相互参照が含まれます。
Apple Books のレビューをページングして取得できますか?
はい。/apple-books/book/{id}/reviews と /apple-books/audiobook/{id}/reviews はどちらも、page と limit のクエリパラメータで最初のページを超えてページングできます。
Apple Books のスクレイピングは合法ですか?
Apple の Website Terms of Use と Media Services Terms はどちらも、書面による同意なしの自動スクレイピングとデータマイニングを禁止しています。公開されているカタログとレビューデータを狭い範囲で収集し、robots.txt とレート制限を尊重することは、レビュー全文を大量収集・再公開するよりリスクが低いですが、これは法的助言ではありません。
Apple Books の書籍詳細はどのようなフィールドを返しますか?
タイトル、著者、ISBN、出版社、ページ数、ジャンル、価格、通貨、発売日、評価、評価分布、そして該当する場合はシリーズの id・名前・順番です。
/apple-books/series と /apple-books/audiobook-series の違いは何ですか?
これらは2つのカタログ向けの別々のエンドポイントです。/apple-books/series/{id} は電子書籍シリーズの書籍を読書順に一覧表示し、/apple-books/audiobook-series/{id} はナレーター付きでオーディオブックシリーズのオーディオブックを一覧表示します。