日本全国の空港情報を網羅する「空港ソムリエ」では、現在、データ取得手法の抜本的な改善に取り組んでいます。今回は、その開発の裏側で直面した「絶望的な壁」と、それを突破した泥臭くも確実な解決策についてお届けします。
全国の空港サイトは、運営主体によって構築手法が千差万別です。大規模な空港ともなれば、サイト内のページ数は1,000ページを超え、構造は迷宮のように入り組んでいます。
ある時、特定の大型空港で問題が発生しました。
「サイト上には確かに存在する店舗情報が、データベースに反映されない」
これまでの手法(PythonのBeautifulSoupを用いたクローリング)で解析を試みましたが、ソースコードを確認して愕然としました。店舗のURLが、ほとんど記載されていなかったのです。
※一部の店舗は他のコンテンツからリンクされていたためにデータを得ることが出来ていました。
- サーバーから送られるHTMLは「空っぽ」
ブラウザでJavaScriptが実行されて初めて、店舗のリンクが生成される仕組みです。 - 特殊なユーザー挙動への依存:
オンマウス(マウスを乗せる)などの動作をきっかけにURLが生成される設計もあり、従来の自動プログラムでは手も足も出ませんでした。
約300件にのぼる店舗データを前に、一時は「すべて手動でカウントするしかないのか……」と、開発チームに絶望が漂いました。
そこで、サーバーにリクエストを送る従来の手法を捨て、「すでにブラウザが組み立てた『完成後の画面』」から直接データを抽出する作戦に切り替えました。
具体的には、ブラウザのデベロッパーツール(コンソール)を活用します。
ブラウザが内部で隠し持っている変数や、JavaScript実行後のDOM構造を直接覗き見ることで、プログラムが見落としていた「真実のデータ」を炙り出すことに成功したのです。
現在取得した店舗データを整理して、データベースへ反映させるさぎょうをしています。

