Javascriptで簡単!Node.jsのスクレイピングモジュール「cheerio-httpcli」のインストールと使い方

Javascriptで簡単!Node.jsのスクレイピングモジュール「cheerio-httpcli」のインストールと使い方

はじめに

対象読者

  • Javascriptを使ってスクレイピングを始めたい人
  • JQueryやCSSを使ったことがある人
  • 基本的なターミナル(コマンドプロンプト)のコマンドを使える人

スクレイピングとは

WEBページの情報をプログラムによって収集・抽出することです。
収集したデータを再構成し、研究やアプリケーションに利用することができます。

cheerio-httpcliとは

Node.js用のWEBスクレイピング用モジュール(ライブラリ)です。
cheerioというJqueryライクなHTML解析モジュールを包含しています。
ちなみにNode.jsとは、ブラウザで実行されることが多かったJavascriptを、
サーバーをはじめとした様々なPC環境で実行させることを可能にする実行環境です。

インストール

Node.JSのインストール

公式ページからインストーラーをダウンロードして、インストールしましょう。
インストールが終わったら、ターミナル(Windowsはコマンドプロンプト)から、

node -v
npm -v

と入力してみます。それぞれのバージョンが表示されればインストール成功です。
(npmはNode.jsに付随するモジュール管理アプリケーションです)

プロジェクトディレクトリの作成

Nodeアプリケーションを作成する作業フォルダ(プロジェクトディレクトリ)を作成します。
今回は、ユーザーのホームフォルダ直下に、「app」というフォルダを作成しましょう。

ターミナル(Windowsはコマンドプロンプト)を開いて、

cd ~/app

として作成したプロジェクトディレクトリに移動し、

npm init

でNodeプロジェクトの初期化を行います。
ターミナルから次々と質問がなされますが、まずはすべてENTERを押して飛ばしていきます。
全ての質問に答えると、Nodeプロジェクトの設定ファイルである、package.jsonが作成されます

cheerio-httpcliのインストール

プロジェクトにcheerio-httpcliをインストールします。

npm install cheerio-httpcli

とすると、ディレクトリ内にnode_modulesというフォルダが作成され、
その中にcheerio-httpcliと、その他の依存モジュールがダウンロードされます。

使い方

サンプルプログラムの実行

cheerio-httpcliには、いくつかサンプルプログラムが用意されていますので利用してみましょう。
今回は、node_modules/cheerio-httpcli/examplesにあるgoogle.jsを実行してみます。

ターミナルを開いて、

cd ~/app/node_modules/cheerio-httpcli/examples

としてサンプルプログラムがあるフォルダに移動し、

node google.js

を実行してみます。

ターミナルにgoogleの検索結果が表示されれば、実行成功です。
このようにして、プロジェクトディレクトリ以下にjavascriptファイルを作成すると
スクレイピングプログラムを作成することができます。

サンプルプログラムの解説

client.fetch('https://google.co.jp/search', { p: word }, function (err, $, res, body) {

スクレイピング対象のサイトを指定しています。

$('#rso .g').each(function () {

cheerio-httpcliが内包しているモジュールcheerioでは、JQueryで使われているような、
CSSセレクタを用いてページ内の要素を指定することができます。
このようなHTML構造は、ブラウザの開発者ツールで調べることができます。

注意点

動的WEBページには向かない

cheerio-httpcliによるスクレイピングは、AngularJS、React、Vue.JSなどの
シングルページアプリケーションと呼ばれる動的に生成されたWEBページの
スクレイピングには向いていません。
動的なWEBページのスクレイピングには、導入が少し複雑になってしまいますが、
CasperJSの利用をオススメします。

同一サイトに短時間に大量リクエストしない

これはスクレイピング自体の注意事項になりますが、
同一サイトに短時間に大量のリクエストをしないようにしましょう。

サイトサーバーに負荷がかかり、サイト運営者に迷惑となるほか、
最悪の場合、DoS攻撃と判定されアクセス拒否をされてしまいます。

リクエストをループ処理する場合は、

settimeout関数を使って間隔を空けるようにしましょう。
for文を使うのではなく、counterを使うのがコツです。

var counter = 0;
function loop(){
  if(counter < 100){
    ★ここにリクエスト命令を書く★
    counter++; //カウンターを進める
    settimeout(loop,10000)//10秒待ってからloopを実行
  }
 }

空ける間隔は普通に人間がアクセスする間隔を目安に考えると良いと思います。

cronでスケジュール実行

このようなスクレイピングプログラムを、ローカルPCではなくレンタルサーバー上で自動実行させるには、
cronと呼ばれる定期実行プログラムを利用するのが一般的です。
cronに対応しているレンタルサーバーはいくつかありますが、

追加料金なし、かつ回数無制限にcronを利用できるのは、
本サイトでもお世話になっている、エックスサーバーのみです。
親切なことに、サーバーパネル画面からcron設定を行えるようになっているので、初心者に最もやさしい方法と言えるでしょう。
もし、自動でスクレイピング定期実行したいと言う方はぜひチェックしてみてください。



WEBプログラミング入門カテゴリの最新記事