モロモロ工事中です

node.jsとjQueryでスクレイピングするウェブアプリの作り方

未分類 — さくら @ 2011/02/01 0:51

やっぱ jQuery 便利ですよ(*´・ω・)(・ω・`*)ネー

セレクタ使って jQuery でダカダカやってると、DOM とか正規表現でネチネチやるのがバカらしくなっちゃいます。

と日頃から思ってたりしてまして、サーバサイド JavaScript がメインストリームになって、jQuery でウェブアプリをコーディングできれば超ラクできるかもと期待しています。

で、先日サーバサイドJavaScriptとjQueryでスクレイピングという記事をうpったところ、やっぱ Rhino じゃなくて node.js がえーんよ(´・ω・`)というコメントを頂きましたので、node.js と jQuery でサーバサイド JavaScript スクレイピングしてみることにしました。

今回は node.js ですので、単にスクレイピングする(コマンドラインから実行する)スクリプトだけじゃなくて、スクレイピングする簡単なウェブアプリを作ってみたいと思います。

jQuery node.js

結構長文になっちゃったので、先に今日のブログで扱ってるテーマを書いときます。

  1. jsdom パッケージを使って node.js で jQuery する方法
  2. jsdom パッケージの HTML コンテンツ中の script タグの扱いに関する問題の回避方法
  3. 文字エンコーディングを考慮した HTML コンテンツのダウンロード方法
  4. スクレイピングウェブアプリの作り方

あと完成品のソースを入れた ZIP も先に置いときますので、中身から見たいセッカチさんはこちらからどうぞ。

nodejs-linkpicker.zip

要るもの

まず node.js が必要です。それと node.js のライブラリをインスコするために npm (Node Package Manager)を使います。一緒にインスコしておいてください。

node.js のインスコ方法については node.js の公式サイトを、npm のインスコ方法については配布元 github の isaacs /npm をご覧ください。

英語読むのがメンドくせー方は node.jsとMySQLで割と普通のデータベースウェブアプリを作ってみるチュートリアルに node.js と npm のインスコ方法を書いてますのでそちらとかどうぞ。

jsdom

node.js 本体には DOM ライブラリが付いてませんのでそのままでは jQuery を使えませんが、npm パッケージの jsdom という DOM ライブラリをインスコすると jQuery も使えるようになります。

jsdom は npm install でインスコできます。

$ npm install jsdom

とりあえず準備はこれで終わりです。

jQuery を使ってみる

早速 node.js で jQuery してみます。

HTML コンテンツに div を追加するスクリプトだとこんな感じになります。

#!/usr/bin/env node
// exam1.js

var sys = require('sys'),
    fs = require('fs'),
    jsdom = require('jsdom'),
    domToHtml = require('jsdom/browser/domtohtml');

var jquery_js = 'https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js';

// node、スクリプト名、の次に有効なコマンドライン引数が入る
if (process.argv.length <= 2) {
    sys.puts('Usage: node exam1.js [FILE]');
    process.exit