WEBクローリングとヘッドレスブラウザとは?




WEBクローリングって何?

WEBクローリングとはWEBサイト情報をAPIから取得し、複製・保存することです。WEBクローリングを使用している有名なWEBサービスとしてはマネーフォワード、Indeed、iQON等があります。

マネーフォワードは顧客の銀行講座情報を取得し全ての入出金を可視化、indeedは様々な企業ホームページから採用情報を取得して転職先を探している人に公開、iQONは100を超えるECサイトから商品情報を取得し公開しています。

WEBクローリング方法

自分がNode.jsばっかり使ってるのでNode.jsのクローリング方法について書きます。Node.jsはJavaScriptで書けて簡単に始められるメリットがあるのでおすすめです。

WEBクローリングの方法は大きく分けて2つ方法があります。GUIのないブラウザ(ヘッドレスブラウザ)を使用したクローリングとAPIを直接使用したクローリングです。この2つの方法についてメリット・デミリットを含めて以下で説明したいと思います。

ヘッドレスブラウザ-Spookyjs

ヘッドレスブラウザとはGUIのないブラウザのことです。このGUIのないブラウザをNode.jsから扱えるのがSpookyjsになります。Spookyjsは内部でCasperjsPhantomjsを使用しています。この3つのライブラリの関係は以下です。

  • Phantomjs: Spookyjsの大元の技術で、PhantomjsがGUIのないヘッドレスブラウザを実現している。
  • Casperjs: Phantomjsをより使いやすくしているライブラリ。
  • Spookyjs: CasperjsをNode.jsから使用できるようにしたライブラリ。

Spookyjsのメリット

  1. ログインが必要なサイトのクローリングに適している
  2. 非同期でデータを取得しているサイトでも非同期を意識せず簡単にクローリングできる
  3. 画面全体のスクリーンショットを簡単に取得できる

Spookyjsのデメリット

  1. レンダリングしているので処理が遅い
  2. 追加読み込み部分だけを取得することができないため無限スクロールがあるサイトのクローリングには適さない
  3. 処理スピードによるところが大きいがサイト内を網羅的にクローリングするのには適さない
  4. コードを書く時のスコープが独特なので慣れるのに時間がかかる。
  5. レンダリングまでの時間があるため処理待ちを挟むなどコードを書く時にコツを知らないと最初は難しい

APIから直接取得

そのままの意味ですね。自分でWEBサイトのAPIの構造を理解してHTMLまたはjson等を取得して解析することです。APIを叩くモジュールとしてsuperagentをよく使用します。superagentはシンプルで使いやすいのでおすすめです。

APIのメリット

  1. 軽量かつシンプルで扱いやすい
  2. HTMLのレンダリングを挟まないのでSpookyjsより早く処理できる
  3. 無限スクロールがあるサイトでも追加読み込み専用のAPIを叩いて追加部分のみのデータを取得できる

APIのデメリット

  1. ログインが必要なサイトでは使えない

まとめ

  • ログインが必要なWEBサイトはSpookyjsを使うと楽。
  • 大量のページをクローリングする場合はAPIを直接叩いてサイト情報を取得した方が早い。

クローリングを行う場合は上記メリットデメリットと照らし合わせてみて、どちらの方法で行うのがいいか一度考えてから取り組むといいと思います。

自分の場合はログインが必要ないサイトはAPIを叩くようにしています。ログインが必要なサイトだけ仕方なくSpookyjsを使っているといった感じですね。

是非参考にしてみてください。次回はSpookyjsを使ったクローリングの方法について書きます。

関連記事

Spookyjsの使い方を下記リンク先に書きました。

おすすめ書籍

JavaScriptとNode.jsを使ったクローラー作成について学びたい方におすすめの書籍です。全8章からなり、前半はクローラーとスクレイピング方法に関して解説されており、後半は取得したデータの形態素解析、機械学習や手書き文字の認識、解析結果のグラフ描画など、どのように分析するのか解説されています。一通りクローリングとスクレイピングを学びたい人におすすめの一冊です。

 

The following two tabs change content below.

髙妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 2018年仮想通貨のスマホウォレットを提供するGinco Incにブロックチェーンエンジニアとして入社。






よく読まれている関連記事はこちら




コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です