Tony Wang6 分で読めます2026年、Old Navy をスクレイピングする方法(API & Python)
2026年に Old Navy、Gap、Banana Republic、Athleta をスクレイピング——検索、カテゴリ閲覧、価格、店舗所在地を JSON で取得。DIY、ノーコード、API の3方法。
2026年に Old Navy をスクレイピングする最も速い方法は、Old Navy のページを自分でパースするのではなく、商品検索、カテゴリ閲覧、商品詳細、店舗所在地に対して正規化された JSON を返す構造化 API を呼び出すことです。さらに大きな利点として、同じ API が Gap Inc. のストアフロントファミリーの残り——Gap、Banana Republic、Athleta——もカバーしており、これら4ブランドはすべて同じエンドポイントを共有し、1つの brand パラメータで切り替えられます。このガイドでは3つのアプローチすべて、それぞれが何を返すか、DIY がどこで破綻するか、そして法律とアクセスの基本を扱います。
なぜ Old Navy をスクレイピングするのか?
- 1つのパイプラインでマルチブランドの小売インテリジェンスを得られる — Old Navy、Gap、Banana Republic、Athleta はすべて同じ Gap Inc. の親会社を通じて販売しており、この API はそれを反映して4ブランド共通のスキーマを1つ用意しているため、1回の検索または商品詳細呼び出しでポートフォリオ全体をカバーできます。
- ブランド横断の価格比較 — 同じシルエット(ベーシックな T シャツ、ジョガーパンツなど)が Old Navy、Gap、Athleta で異なる価格で出ていることが多く、比較するには各ブランドを同じキーワードでクエリする必要があります。
- 価格と値下げの追跡 — Old Navy は頻繁にプロモーションを実施しています。検索や商品詳細をスケジュール実行することで、カラーとサイズごとの価格・割引の変動を追跡できます。
- アソートメントとカテゴリのリサーチ — あるカテゴリに何が並んでいて、件数がどう変化しているかをブランドごとに確認します。
- 店舗カバレッジのマッピング — 郵便番号、都市、座標であるブランドの近隣の実店舗を検索でき、ローカルの在庫状況や店舗密度のリサーチに役立ちます。
Old Navy をスクレイピングするのは合法か?
選択肢1: Python で DIY する(そしてなぜ破綻するか)
素朴なアプローチは商品ページを取得し、レンダリングされた HTML をパースするというものです。
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://oldnavy.gap.com/browse/product.do?pid=123456002",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, color, and size availability are embedded in page data,
# not consistently exposed as stable, selectable markup
一度は動きますが、そこから破綻します。
- 4つの別々のブランドドメインが、1つの共通基盤の上に乗っている。 Old Navy、Gap、Banana Republic、Athleta はそれぞれ独自のストアフロントドメインを、共通の Gap Inc. コーポレート傘下で運用しています。
oldnavy.gap.com向けに組んだスクレイパーは、手直しなしにはgap.com、bananarepublic.gap.com、athleta.gap.comにそのまま使い回せません。 - アンチボット対策がサイトの前面にある。 ルーティンな未認証リクエストはすぐにチャレンジやブロックを受け、ブラウザベースのスクレイパーは対策が更新されるたびに継続的なメンテナンスが必要になります。
- カラーとサイズが1つの「商品」を分断する。 検索結果は商品の全体像ではありません——各カラーバリエーションは独自の商品 id を持ち、あるカラー内の各サイズも独自の価格と在庫状況を持つため、1回のページ取得では全体像は決して得られません。
- カテゴリナビゲーションは静的なリストではない。 反復処理できるカテゴリ id の公開リストは存在せず、まずライブサイトから解決する必要があります。しかも Gap、Banana Republic、Athleta ではそのナビゲーションがクライアントサイドのみの JavaScript でレンダリングされるため、単純な HTML 取得では表示すらされません。
選択肢2: ノーコードツール
ポイント&クリック型のスクレイパーやブラウザ拡張機能は、1つのブランドの検索結果ページを1回分エクスポートすることはできますが、関連する4ブランドについて価格とアソートメントをスケジュールに沿って追跡するのは繰り返し実行されるパイプライン処理であり、手動のエクスポートツールよりも、スクリプトや cron ジョブから呼び出せる API のほうが適しています。
選択肢3: 構造化された Old Navy API
Crawlora の Old Navy APIは、Old Navy、Gap、Banana Republic、Athleta を横断して、検索、カテゴリ閲覧、商品詳細、店舗所在地に対して正規化された JSON を返します。ブランドは1つの brand パラメータ(on、gap、br、at。デフォルトは on)で選択します。キーワードで検索する場合。
curl "https://api.crawlora.net/api/v1/oldnavy/search?query=joggers&brand=on" \
-H "x-api-key: $CRAWLORA_API_KEY"
brand を変えるだけで、同じ呼び出しでブランドを切り替えられます。
curl "https://api.crawlora.net/api/v1/oldnavy/search?query=joggers&brand=gap" \
-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/oldnavy"
hits = requests.get(f"{base}/search", headers=h, params={"query": "joggers", "brand": "on"}).json()["data"]["products"]
first_color = hits[0]["colors"][0]
pid = first_color["pid"]
detail = requests.get(f"{base}/product", headers=h, params={"pid": pid, "brand": "on"}).json()["data"]
カテゴリ閲覧にはカテゴリ id が必要です——まず現在の id を解決し(今のところ Old Navy のみ)、そのカテゴリの一覧とライブファセットを取得します。
categories = requests.get(f"{base}/categories", headers=h).json()["data"]["categories"]
cid = categories[0]["cid"]
listing = requests.get(f"{base}/category", headers=h, params={"cid": cid, "brand": "on"}).json()["data"]
店舗所在地は、郵便番号、都市、座標をブランドごとに受け付けます。
curl "https://api.crawlora.net/api/v1/oldnavy/stores?zip=94103&brand=on" \
-H "x-api-key: $CRAWLORA_API_KEY"
パイプラインを組む前に、正確なフィールド名をドキュメントで確認してください。1回の取得ごとに商品×カラーで1行を pid をキーとして保存し、検索または商品詳細をスケジュール実行して価格と在庫状況の変化を追跡します。
何を収集できるか
brand を渡すことで、Gap Inc. の4ブランドすべてにわたる公開の商品データと店舗データを収集できます。検索結果(価格と全カラーバリエーションを含む商品サマリー)、カラー別の pid ごとの完全な商品詳細(サイズごとの価格を含む)、cid を解決した後のライブ検索ファセット付きカテゴリ一覧(/oldnavy/categories は現時点では Old Navy の id のみを解決します。Gap、Banana Republic、Athleta はナビゲーションをクライアントサイドのみの JavaScript でレンダリングしているためです)、そして郵便番号・都市・座標による近隣の実店舗(住所、電話番号、距離を含む)。あくまで公開されているストアフロントデータのみであり、アカウント情報・注文情報・支払い情報は含まれず、店舗検索も商品単位の在庫レベルは報告しません。
制約とよくある課題
- フロントエンドのアンチボット対策。 ストアフロントに直接、素朴または大量の自動化リクエストを送ると、チャレンジを受けることを想定してください。
- 4ブランドのうち3ブランドのカテゴリ id はまだ解決できない。
/oldnavy/categoriesは今のところ Old Navy しかカバーしていません。Gap、Banana Republic、Athleta のナビゲーションはクライアントサイドのみの JavaScript でレンダリングされるため、これらのブランドにはまだ同等の id 一覧がありません。 - 商品 id はカラーごとに異なる。 検索結果は単一の商品 id ではありません——詳細をリクエストする前に、結果の
colors[]配列からpidを取り出してください。そうしないと誤ったバリエーションを取得してしまいます。 - 店舗検索には商品単位の在庫がない。
/oldnavy/storesは近隣の実店舗と連絡先情報を返しますが、特定の商品がその店舗に在庫としてあるかどうかは示しません。 - 公開データのみ。 これは商品ページ、カテゴリページ、店舗検索ページがすでに公開している内容そのものであり、ログインを回避したりアカウントレベルのデータに入り込んだりする手段ではありません。
どこで使われるか
- ブランド横断の価格インテリジェンス — 同じスタイル(ベーシック T シャツ、ジョガーパンツ、パファージャケットなど)が Old Navy、Gap、Banana Republic、Athleta でどう価格設定されているかを追跡します。
- アソートメントリサーチ — キーワードごとのカテゴリ件数とカバレッジをブランドごとに計測します。
- ローカル在庫と店舗密度のマッピング — 郵便番号による店舗検索を商品検索と組み合わせ、地域別のカバレッジをモデル化します。
出典
収集を始める
まずは無料で試す: Free Web Scraperで任意の公開 URL を実行するか、Anti-Bot Checkerでサイトがボットをブロックしているかを確認できます——サインアップ不要です。
Playgroundで検索、商品、カテゴリ、店舗のエンドポイントをテストし、API ドキュメントでスキーマを確認し、料金ページを確認してください。国別ストアフロントを持つファッションマーケットプレイスで同じ「検索から詳細まで」の形を見るならZalando のスクレイピング方法を、単一ブランドのアスレチックウェア比較にはNike のスクレイピング方法を、もう1つのファストファッションチェーンについてはZara のスクレイピング方法をそれぞれ参照してください。あわせてウェブスクレイピング API の選び方と2026年、ウェブスクレイピングは合法か?もご覧ください。
よくある質問
Old Navy API は Gap、Banana Republic、Athleta もカバーしていますか?
はい——/oldnavy/search、/oldnavy/category、/oldnavy/product、/oldnavy/stores はすべて brand パラメータ(on、gap、br、at。デフォルトは on)を受け付け、ストアフロントを選択できます。/oldnavy/categories は現時点では Old Navy の id のみを解決します。他の3ブランドはナビゲーションをクライアントサイドのみの JavaScript でレンダリングしているためです。
API で Old Navy のカテゴリを閲覧するにはどうすればよいですか?
Old Navy のストアフロントナビゲーションは静的な id リストとして公開されていません。まず /oldnavy/categories を呼び出して現在のカテゴリ id を name/cid のペアとして解決し、その cid を /oldnavy/category に渡すことで、そのカテゴリの商品一覧を取得できます。
近隣の Old Navy 店舗の所在地を調べることはできますか?
はい——/oldnavy/stores は郵便番号、都市、または座標を指定することで、住所・電話番号・距離を含む近隣の実店舗を返します。ただし商品単位の在庫レベルは報告しません。