【ITニュース解説】Shopify products.json vs anti-bot walls: 85 fashion sources, measured
2026年09月30日に「Dev.to」が公開したITニュース「Shopify products.json vs anti-bot walls: 85 fashion sources, measured」について初心者にもわかりやすく解説しています。
ITニュース概要
Webから商品データを自動取得する個人エージェントを開発した際、85サイトを調査した。約半数はブロックされるか解析できず、Shopifyの/products.jsonのように構造化データを提供するサイトは取得が容易だった。robots.txtの誤解やJavaScript実行の必要性など、プログラムからのデータ取得には多様な課題があり、正直なアプローチが重要だと分かった。
ITニュース解説
システムエンジニアを目指す皆さんは、Webサイトから情報を集めるプログラムを作ることに興味があるかもしれない。今回紹介する記事は、まさにその実践的な取り組みから得られた、貴重な教訓をまとめたものだ。
著者は、自分の欲しい洋服や靴のセール情報を自動で探す「パーソナルショッピングエージェント」というプログラムを自作した。このプログラムは、複数のファッション通販サイトから、自分のサイズに合ったセール品を探し出すのが目的だ。しかし、Webサイトからデータを自動で収集する過程で、多くの困難と発見があったという。
まず、著者が試した85サイトのうち、プログラムが商品情報を取得できたのは45サイトにとどまった。取得できた割引商品4,112点のうち、自分のサイズに合うと確認できたのはわずか941点だった。これは、Web上の情報をプログラムで扱うことの難しさを示している。
特に注目すべきは、ShopifyというECサイト構築サービスを利用しているストアのデータ取得効率の高さだ。Shopifyのストアでは、URLの末尾に「/products.json」を追加するだけで、そのストアの全商品データがJSON形式で提供される。このJSONデータには、価格、割引情報、そして各サイズの在庫状況まで含まれていた。これはWebページ全体を解析する「スクレイピング」よりもはるかに効率的で、安定したデータ取得方法だ。著者は、スクレイピングを始める前に、サイトがこのように構造化されたデータを公開していないか確認するべきだと述べている。
一方で、多くのサイトでは、商品情報は取得できても、自分のサイズが在庫にあるかどうかの情報を正確に読み取ることが難しかった。プログラムが「お得な商品」を見つけても、自分のサイズがなければ意味がない。そのため、著者はサイズ情報が不明な商品はアラートの対象から外すというルールを設けた。
このプロジェクトを通じて、著者はプログラム開発における4つの大きな間違いから多くの教訓を得た。
一つ目の間違いは、Webサイトのアクセス制限を誤解したことだ。特定のサイトのrobots.txt(Webクローラーのアクセスルールを定めるファイル)が「403 Forbidden」というエラーを返したため、アクセスが禁止されていると判断した。しかし実際は、ファイル自体がセキュリティシステムの後ろにあっただけで、ブラウザのように正しい方法でアクセスすれば問題なかった。これは、エラーコードの表面的な意味だけでなく、その原因を深く探ることが重要であることを示している。
二つ目の間違いは、「ブロックされた」という状態を漠然と捉えていたことだ。プログラムがサイトにアクセスできない原因は様々だ。JavaScriptで動的にコンテンツが生成されるため読み取れない、指定したURLが間違っている、単なるネットワーク接続の問題など、多くのパターンがある。これらをすべて「ブロックされた」と一括りにすると、本当の問題解決にはつながらない。プログラムのステータス表示は、単にエラーを示すだけでなく、「なぜエラーなのか」という具体的な理由を記録するべきだと著者は学んだ。
三つ目の間違いは、サイト側の問題だと思っていたことが、実は自分のプログラムのバグだったケースだ。ある靴販売サイトでサイズごとの在庫情報が取得できないと考えていたが、実際にはWebページ内にJSON形式でその情報が埋め込まれていた。著者のプログラムはページの見た目しか解析していなかったため、重要な情報を見落としていたのだ。Webサイトがどのように情報を構成しているかを深く理解し、さまざまなデータ取得方法を試すことの重要性を示している。
四つ目の間違いは、プログラムが勝手に推測してしまったことだ。著者の作ったコーディネート提案機能が、彼の好みに合わない色の服を提案してしまった。これは、著者がプログラムに「茶色とクリーム色は好きだろう」という前提を明示的に指定してしまっていたためだ。この経験から、プログラムには「推測させる」のではなく、人間が明確な「ルール」や「データ」を与えることの重要性を学んだ。特にAIを活用する際には、プログラムが得意な部分と、人間が明確に指示すべき部分を区別し、適切に役割分担させることが成功の鍵となる。
著者は、Webからのデータ収集に関していくつかの重要なルールも設定した。プログラムがWebサイトにアクセスする際は、自分を正直に名乗り(User-Agentを偽らない)、無用な負荷をかけないこと。そして、プロキシやCAPTCHA(画像認証)の回避策を講じないことだ。もしWebサイトがAkamaiのような高度なアンチボットシステムでアクセスを制限してきた場合、それはサイト側が自動アクセスを望まないという意思表示であると受け止めるべきだという。それに無理に対抗しようとすることは、倫理的にも技術的にも持続可能ではない。
最終的に著者は、Webからのデータ収集について一つの結論に至った。それは、最初から構造化されたデータを公開している、または自身のWebサイトの仕組み上、間接的に構造化されたデータを提供しているストアが、最も協力的でデータを取得しやすいということだ。それ以外のサイトは、アンチボットの壁を築くことに多くの費用と労力を費やしている。しかし、著者が本当に知りたかったのは、「このジャケットは私のサイズで手に入りますか?」というシンプルな事実だけだった。
この一連の経験は、システムエンジニアを目指す皆さんにとって多くの示唆を与えてくれるだろう。Webの世界で情報を扱うプログラムを作る際には、技術的な知識だけでなく、Webサイトの構造を深く理解する洞察力、エラーから学ぶ探求心、そして何よりも、Webサイト運営者への敬意と倫理的な姿勢が求められる。表面的な結果だけでなく、その裏にある仕組みや原因を常に考える姿勢を養うことが、優れたシステムエンジニアへの第一歩となるはずだ。