[Nodejs] クローリングシステム構築 #1.Spookyjsの環境設定

2017年5月12日

Nodejs テクノロジー プログラミング 特集

仕事をするにも、Webから情報を集めてきたり、特定のサイトの更新情報を見つけに行ったり、データが置いてあるページから数値などをコピペしたりする作業は実はマクロ化して、自動的にPCに行わせたほうが効率的でしょう。 これは以前にも記事に書いた「RPA」という手法で、こうした思考を持っている人が、仕事をどんどん数多くこなせるようになれるわけです。 RPAのもたらす未来 そして、それを実現させる方法は、ブラウザの機能拡張や、Selenium、アプリケーション開発・・・など、色々なやり方が存在しますが、以下のポイントを考慮して、今回はMacでDockerを使って、NodejsのSpookyjsライブラリで構築して、実運用できるようにしてみたいと思います。
【要件定義】 ・手元のノートPC(mac)で手軽に使いたい。 ・初期構築に大規模な開発を行いたくない。 ・WEBページと親和性の強いJavascriptを内部で扱えるようにしたい。 ・仕事でも、自宅でも使いたいので、手元のノートPCじゃなくても環境を移行できるようにしたい。

環境想定

以前にSpookyjsの構築記事を書いたのですが、時間が立っているのと、Dockerベースで環境構築を行いたかったので、改めて手順を残したいと思います。 サーバーサイドで画面キャプチャ #その4 SpookyJS

ノートPC

MacOSX 10.12.4 Sierra
これは、会社でも自宅でも使っているのと、windowsでは色々な制限が入ってしまうので、とりあえずこの条件にしますが、 下記のDocker環境が別OSで構築出来る場合は、Macでなくても、同一環境が可能です。

Docker

別環境にOSごとコンテナとしてコピーできてしまうお手軽さがあり、VertualBoxよりも軽い事と、Linuxサーバーと親和性が高い事で、 あえてDocker構築にします。 特にDockerである必要はないので、VirtualBoxやVMWware、直接のLinuxOSでも問題ないと思います。 ただ、今回はUbuntuベースで作っていくので、CentOS系の場合は、若干手順が違う箇所があるので、その点は自己責任で行ってください。

OS内部構造

・Ubuntu 16.04.1 ・Nodejs v4.2.6 ・Phantomjs 2.1.1 ・Casperjs 1.1.4 ・Spookyjs 1.8
これらのバージョンは今現在のインストール環境にあるものを抜き出しただけなのですが、個人的にバージョン依存させたくないので、どれも最新バージョンで構築してもいいようにしたいと思いますが、書くライブラリの仕様が大きく変わった場合はご了承ください。

環境構築手順

MacにDockerをインストール

Dockerのインストールも以前に記事書いてあるので、そちらを参照してください。 Mac版Dockerを使って開発環境の構築

Nodejsインストール

通常のインストールは下記で問題ないです。 $ apt-get install -y nodejs npm # 確認 $ node -v v4.2.6 $ npm -v 3.5.2 最新版のインストールまたは、特定バージョンのインストールにこだわりたい場合は、nvmを使ってインストールしましょう。 # nvmライブラリをgithubから取得 $ git clone git://github.com/creationix/nvm.git ~/.nvm # nvm実行 $ source ~/.nvm/nvm.sh # インストールできるバージョン確認 $ nvm ls-remote # 最新バージョンをインストールする事をオススメ。(別のバージョンでも可) $ nvm install v7.10.0 # 確認 $ node -v v7.10.0 $ npm -v 4.2.0 $ nvm --version 0.33.2 ただし、Dockerを使っている場合、コンテナを再起動するたびに、「source ~/.nvm/nvm.sh」コマンドを実行しないといけないので、通常のaptインストールをオススメします。 そして、npmはnodejsのバージョンに合わせて対象のバージョンがインストールされるようです。

phantomjsとcasperjsのインストール

これらのインストールは下記の3パターン存在するようです。
1. apt-getでインストール 2. npmでインストール 3. ソースコードを取得してインストール
これも1番、2番は、トラブったこともあるので、3番をオススメします。

1. apt-getでインストール

# phantomjs $ apt-get install phantomjs # casperjs $ apt-get install casperjs 2. npmでインストール # phantomjs $ npm install -g phantomjs # casperjs $ npm install -g casperjs

3. ソースコードを取得してインストール

$ cd /usr/local/share # phantomjs $ wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2 $ tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 $ mv phantomjs-2.1.1-linux-x86_64 phantomjs $ ln -sfn /usr/local/share/phantomjs/bin/phantomjs /usr/local/bin/ # casperjs $ git clone https://github.com/casperjs/casperjs.git $ ln -s /usr/local/share/casperjs/bin/casperjs /usr/local/bin/ # 確認 $ phantomjs --version 2.1.1 $ casperjs --version 1.1.4

関連リンク

phantomjs casperjs

Spookyjsのインストール

そして、今回の主役であるSpookyjsのインストールはnpmで行います。 グローバル環境にインストールしてもいいですが、今回は、ローカル環境にインストールしてみます。 $ npm install spookyjs

ここで問題発生!!

以前作ったプログラムが、今回の環境で動きません。 いろいろ調べてみたところ、Spookyjsのモジュールがおかしいようです。

解決

そして更にわかったのは、npmインストールした時に、nom_modulesフォルダに、「spooky」以外のフォルダが作られていることに気が付きました。 node_modules/spooky node_modules/*** これは、モジュールが利用するパッケージを同時にインストールしているらしいのですが、以前は、こうした階層構造ではなく、 node_modules/spooky/nodemodules/*** という階層に入っていました。 spooky以外のフォルダを「node_modules/spooky/nodemodules/」この下に移動させてみたらちゃんと動作出来ました。 これは、npmのバージョンの問題なのか? 何かしらの仕様が変わったのか、今のところは深掘りせずに、そのうち手が空いた時に調べてみたいと思います。 Docker環境でよかった・・・本番だったらトラブってたところだ。

関連リンク

spookyjs

起動テスト

インストール作業が完了したら、モジュールの起動テストです。 下記ソースコードを設置して、実行してみましょう。

ソースコード

※このコードはspookyjsのgithubページにサンプルで置いてあるものです。 try { var Spooky = require('spooky'); } catch (e) { var Spooky = require('../lib/spooky'); } var spooky = new Spooky({ child: { transport: 'http' }, casper: { logLevel: 'debug', verbose: true } }, function (err) { if (err) { e = new Error('Failed to initialize SpookyJS'); e.details = err; throw e; } spooky.start( 'http://en.wikipedia.org/wiki/Spooky_the_Tuff_Little_Ghost'); spooky.then(function () { this.emit('hello', 'Hello, from ' + this.evaluate(function () { return document.title; })); }); spooky.run(); }); spooky.on('error', function (e, stack) { console.error(e); if (stack) { console.log(stack); } }); /* // Uncomment this block to see all of the things Casper has to say. // There are a lot. // He has opinions. spooky.on('console', function (line) { console.log(line); }); */ spooky.on('hello', function (greeting) { console.log(greeting); }); spooky.on('log', function (log) { if (log.space === 'remote') { console.log(log.message.replace(/ \- .*/, '')); } });

実行

$ node spooky.js Hello, from Spooky the Tuff Little Ghost - Wikipedia メッセージが表示されたら、成功ですね。 とりあえず、今回は環境構築ですが、次回は、クローリングの基礎コードを書いてみたいと思います。

関連リンク

クローリングシステム構築

  • ユゲタ
    2019/02/10 at 21:41
    Centosでphantomjsを実行するとエラーが出る場合は、 $ yum -y install fontconfig-devel を実行するといい感じ。
  • ユゲタ
    2017/10/31 at 08:42
    spookyjs のインストールが環境によって下記にしないとエラーが出る場合があるようです。 $ npm install spooky

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ