【開発レポート】動的コンテンツに阻まれたとき、エンジニアが最後に頼るのは『自分自身のブラウザ』だった話

日本全国の空港情報を網羅する「空港ソムリエ」では、現在、データ取得手法の抜本的な改善に取り組んでいます。今回は、その開発の裏側で直面した「絶望的な壁」と、それを突破した泥臭くも確実な解決策についてお届けします。

改善の背景:見つからない店舗データ

全国の空港サイトは、運営主体によって構築手法が千差万別です。大規模な空港ともなれば、サイト内のページ数は1,000ページを超え、構造は迷宮のように入り組んでいます。

ある時、特定の大型空港で問題が発生しました。

「サイト上には確かに存在する店舗情報が、データベースに反映されない」

これまでの手法(PythonのBeautifulSoupを用いたクローリング)で解析を試みましたが、ソースコードを確認して愕然としました。店舗のURLが、ほとんど記載されていなかったのです。

※一部の店舗は他のコンテンツからリンクされていたためにデータを得ることが出来ていました。

2.なぜ既存の手法が通じないのか?(技術解説)

  • サーバーから送られるHTMLは「空っぽ」
    ブラウザでJavaScriptが実行されて初めて、店舗のリンクが生成される仕組みです。
  • 特殊なユーザー挙動への依存:
    オンマウス(マウスを乗せる)などの動作をきっかけにURLが生成される設計もあり、従来の自動プログラムでは手も足も出ませんでした。

    約300件にのぼる店舗データを前に、一時は「すべて手動でカウントするしかないのか……」と、開発チームに絶望が漂いました。

3.解決策:ブラウザが見ている「完成図」を奪う

そこで、サーバーにリクエストを送る従来の手法を捨て、「すでにブラウザが組み立てた『完成後の画面』」から直接データを抽出する作戦に切り替えました。

具体的には、ブラウザのデベロッパーツール(コンソール)を活用します。
ブラウザが内部で隠し持っている変数や、JavaScript実行後のDOM構造を直接覗き見ることで、プログラムが見落としていた「真実のデータ」を炙り出すことに成功したのです。

現在取得した店舗データを整理して、データベースへ反映させるさぎょうをしています。

目次