node.js の基本とスクレイピングの使い方、メリットデメリット

2014年5月6日更新 view: 118 view
photoBy: http://www.bonillaware.com/wp-content/uploads/nod…

node.jsって何よ?

node.js で動くサーバはシングルプロセスで動くのでリソースを消費せず、さらに非同期IOというもので、IO待ちをすることなく、次の処理にいけるので効率がよいみたい。
このため、かなり大量のクライアントがサーバへ同時にリクエストしに来ても対処できてしまうというわけです。

意味わからん

簡単に例えると

・皿洗い 10分
・煮物 30分
・焼き魚 25分

この3つの処理を任せた場合、

プロの料理人 (node.js)

プロなら魚を焼きながら、
煮物を見つつ、
皿も洗う

3つの処理を同時にする。
合計 30分。


これがマルチスレッドモデル。
イベントループ。

ド素人主婦 (apache)

魚を焼き終わった後、
煮物を開始し、完成した後、
やっと焼き魚。

合計 65分

これだと時間がめちゃめちゃかかり、
多すぎると発狂しヒステリーを起こす。

最悪の場合訴訟沙汰で慰謝料をぶんどられる。

一つの予定に対して、一つのことしかできない。


並列で処理するので、プロのが圧倒的に早い。
つまり、node.jsのが圧倒的に早いということ。

apacheだと MaxClientsという同時接続数を設定するディレクティブがありますが、128 と設定した場合、128のクライアントが接続しているとするとそれ以上のクライアントが接続できずタイムアウトになります。
つまり、無限に仕事を押し付けるとパンクする。

忙しい処理はnode.jsに任せよう

まずはドットインストールで基本を学ぶ。

http://dotinstall.com/lessons/basic_nodejs

ここでポイント

node.js では ノンブロックな書き方をする。
時間のかかる作業は settimeout に任せよう。

npmのコマンドで ejs をインストールする場合は、必ず使いたいフォルダ
cd /var/www/your/hoge/
に移動してから
npm install ejs をやること。

じゃなと conflictエラーになるんだわ

なんでnode.jsにスクレイピングさせるんや!

phpでもええやん。

  • 100サイト同時にスクレイピングする場合、1-100まで順番にアクセスするので激遅い
  • php自体スクレイピングするには重い

node.jsのスクレイピングは何がいいんや!

  • 一気に100サイトにアクセス
  • ヘビーな処理をしても apacheや nginxなどのサーバーソフトに直接影響がないので良い

じゃ・・・じゃあnode.jsライブラリ以外に何をつかえばいいんや!

chelio ではなく、 cheerio.jsがあるやん

jsdomが重くて書式が厳格に決められているから使えないサイトが多くなってきた
もっと手軽で簡単なDOM操作をしたい

jQueryチックなDOM操作をnode.jsから出来るということで、
使いやすいと個人的に感じました。

比較どん!

jsdom

たぶん一番有名で高機能、だけど重い。

photoBy: https://pbs.twimg.com/media/BSpWhSiCAAEnlW1.jpg

node-jquery

jQuery読むだけならコレ!みたいな感じ、だけどあんまりアップデートされてないかも。使いかたはいちばんシンプル。
依存関係がちゃんと書かれてなくて、追加で手で xmlhttprequest をインストールしておかないと動かなかった。

cheerio

おもすぎるので軽くしますよライブラリ

closetも使えるようになった

zombie

ブラウザの挙動をシミュレートする的なライブラリ、Mechanizeみたいなやつ

sqraper 

スポンサードリンク

ページをGETしてjQueryでスクレイピングする、content-bodyを与えてparseするモードがない(必ずページURLを与える)

勉強しませう

まずは下準備の方法

http://liginc.co.jp/programmer/archives/4848

一番簡単なサンプル

http://javascript-memo2.seesaa.net/article/356859533.html

時間を空けるサンプル

http://heisjohn.sakura.ne.jp/tips/?p=443

スクレイピングしたものをそのままhtmlへ渡すサンプル

http://blog.anaguma.org/articles/2013-12-19/

スクレイピングサンプル

http://106n.net/toro/blog/nodejs-jquery-scraping/

自動文字コード変換 utf-8 へ。

http://qiita.com/ujiro99@github/items/648a9400e8b25d717b1e
http://ujiro.hatenablog.com/entry/2013/05/03/022739

node.js デーモン化 自動再起動
History APIでページ全体リロードなしに遷移

http://www.atmarkit.co.jp/ait/articles/1301/16/news009_3.html

スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

12月10日 ( 月 ) にアクセスが多かった記事はこちら!