堀田純平 電話番号: 05031886165(旧: 05058924580, 神奈川県第9区)@はてな

堀田純平(ほった じゅんぺい)が技術的な事や個人的な出来事を中心に投稿します。

最近流行りのSPAは非公式APIがあるからスクレイピングしなくていいじゃん

この記事はWebスクレイピング Advent Calendar 2017 - Adventarの24日目の記事です。

身の回りのポチポチ作業の自動化やスクレイピングが大好きなほつたです。 今回は、今流行のSPAサイトをスクレイピングしようとして、スクレイピングなんてしなくていいじゃんと気づいた話をしたいと思います。 ざっと書いてしまうので、基本的なことやSPAについての説明は省きます。分からない方は適度にググって下さい。

きっかけ

最近流行りの出前サイトをスクレイピングしたいと思ったのですが、サイトが今流行のSPAで画面をスクロールする毎に情報が表示されるサイトをスクレイピングなんてしたくありません。 強引にスクレイピングをしようとしたのが2017年の中で1番苦痛だったかもしれません。 それでもどうにかスクレイピングをしたいと思っていたのでした。

ハブる大切さ

一苦労している中、APIがあったらいいなという思いでGithubを検索したところ、良さげなリポジトリを見つけました。 (コードに関してはググるんじゃなくて、早くハブれば良かったと思いました。)

github.com

コードリーディングをしたところ、なんと非公式APIを叩いて情報を取得しているのです。 (あぁ。そういえば、このサイトSPAじゃん...。) これはと思い、自分で非公式APIを叩いてみることにしました。

非公式APIの鍵:X-CSRFトーク

コードを読んでいると、X-CSRFトークンを手に入れた上でAPIを叩いて情報を取得しているようでした X-CSRFトークンはCookieと紐付いていて、Cookieを所持しない状況でAPIを叩くと情報が返ってきません。 最初、Rubyの標準添付ライブラリ net/http を使ってAPIを叩いていてCookieを所持しないため失敗してしまいました。 結局、大人気の rest-client というライブラリを使ってAPIを叩いてやっと情報を手に入れることに成功しました。

非公式APIを活用して完成したもの

redcycle.hatenablog.com

非公式APIを活用することにより、欲しい情報を手軽に得ることが出来て以下のものが出来ました。 残念ながら、用意されるべきGoogleマイマップのAPIがないためにSeleniumを使って強引にマイマップを更新しています。

まとめ

SPAサイトはスクレイピングよりも非公式APIを適度に叩いてみるのが手早いです。 SPAっぽいサイトだなと思ったら、ChromeデベロッパーツールのNetworkパネルで「api」と検索すればAPIっぽいのが見つかることが多いです。 何でもかんでもスクレイピングしたくなりますが、APIを叩く方が手軽かと思います。

以上、「最近流行りのSPAは非公式APIがあるからスクレイピングしなくていいじゃん」でした。

adventar.org