「JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック」という長いタイトルの本を書きました。先日より、Amazonで予約注文ができるようになっています。

内容は、JavaScript(主にNode.js)を利用して、クローラーを作ったり、形態素解析をしたり、人工無能(会話ボット)を作ったり、機械学習をしたりと、盛りだくさんの内容になっています。

中級者向け(脱初心者のため)の本となっています。JavaScriptをもう少し頑張ろうと思っている方、尖ったことに挑戦したい方、アフィリエイターや自動ページ生成系で広告収入を狙っている方など、多くの方に読んでいただければと思っています。よろしくお願いします。

nodejs-netagent.jpg

補足  *

  • 2015/09/04
  • 2016/06/17

書籍の内容(p.26)に対するフォローです。

Vagrantで仮想マシンをセットアップする際、設定ファイル「Vagrantfile」に「chef/centos-6.5」を書き込むよう指示がありますが、最近になり、このboxファイルにアクセスできなくなっているようです。そこで、代わりに、以下を指定してください。

# config.vm.box = "base"                ← コメントアウト
config.vm.box = "puphpet/centos65-x64"  ← このように書き換える

ただし、このBoxファイルもいつまで使えるか分からないので、書籍に書かれているとおり、「http://vagrantcloud.com」からCentOSを探して、任意のBoxファイルの名前を記述してみてください。

Vagrantの環境がうまく構築できない場合、より詳しい情報を以下に掲載しますので、以下を参考にしてみてください。

(参考)「VagrantでCentOSをインストール」を参照してください。
  • また、Windows10でVagrant1.8.3が動かない問題があるようです。こちらに解決策があるので、ご確認ください。

(p.70)(p.71)(p.73)(p.75)(p.76)(p.176)(p.285)(p.320)(p.323)(p.325)(p.338) stringifyに対する編集上のミス *

プログラムや本文の数カ所で、stringifyの中の「GIF」が大文字になってしまっていますが、明らかな間違いです。

  • (間違い) JSON.strinGIFy(...)
  • (正しい) JSON.stringify(...)

(p.95) 三章 PhantomJS/CasperJSでFlickrのネコページをキャプチャ *

FlickrのWebサイトのトップページが変更になってしまったため、プログラムが動かなくなってしまいました。以下のようにプログラムを直すと動きます。(初版)のp95では、CasperJSのプログラムの雰囲気を掴むことを目的としているもので、昔のFlickrは書籍掲載のサンプルで動いたんだなと流し読みしてくだされば嬉しいです。

// Flickrで検索しスクリーンショット撮る for CasperJS
// CasperJSのオブジェクトを作成
var casper = require('casper').create();

// CasperJSの処理を開始する ---- (※1)
casper.start();

// 画面サイズを指定する ---- (※2)
casper.viewport(1400, 800);

// UserAgentの指定
casper.userAgent('User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36');

// Flickrのサイトでネコを検索 ---- (※3)
var text = encodeURIComponent("ネコ");
casper.open('https://www.flickr.com/search/?text=' + text);

// その後、画面をキャプチャ---- (※4)
casper.then(function(){
  this.capture('flickr-cat.png',{
    top:0, left:0, width: 1400, height: 800
  });
});

// 実行開始
casper.run();

(プログラム変更に伴う解説の変更) プログラムの(※3)では、ネコを検索するFlickrのWebサイトを開きます。そして、(※4)のthen()メソッドで、サイトを開いた後の処理、つまり、画面キャプチャを行います。ここでは、キャプチャする範囲を引数として指定領域をキャプチャします。

(p416)の補足 *

補足ですが、WindowsでNode.jsのモジュールをインストールするとき、ソースコードからバイナリをコンパイルする必要がある場合、PythonやWindowsのSDKが必要になることがあります。

例えば、SQLite3のモジュールをインストールする場合、こちらのリンクを参考にしてみてください。

(p79) 表が間違っていました。 *

XML形式では、format=jsonのところが、format=xmlが正解です。

JSON 形式で為替レートを得る
http://api.aoikujira.com/kawase/get.php?code=USD&format=json

XML 形式で為替を得る
http://api.aoikujira.com/kawase/get.php?code=USD&format=xml

修正点を指摘してくださった皆さんに感謝します。



補足 - 2015/09/10 *

けっして初心者向けとはいえない本ですが、9/4の深夜にWebプログラミングで4位まで行きました。9/10に見たら、ベストセラーとなっており、順位は一位でした。

amazon-rank-agentbook.png

皆さんに感謝です!

Comments:
なかほん質問です。p92にでcasperjsをインストールごファイルをgetTitlejsを実行するとUnsafe JavaScript attempt to access frame with URL about:blank from frame with URLとエラーが出ます。このエラーはphantomjsが1.9,7もしくは1.9.9以降?だとfixされているそうなのですがnpm install すると現状1.9,8のbug fix前のものが落ちてくるそうです。option追加 --web-security=falseすれば1.9,8でも問題ないようなのですが煩雑です。こちら執筆時点ではこのエラー発生しませんでしたでしょか?解決方法等ありましたら教えていただければと思います。よろしくお願いいたします。 (2015/10/04)
環境構築失敗!p27の仮想マシンの起動の所で、次のようなメッセージを出して失敗してしまいました。==> default: Waiting for machine to boot. This may take a few minutes...The guest machine entered an invalid state while waiting for itto boot. Valid states are 'starting, running'. The machine is in the'poweroff' state. Please verify everything is configuredproperly and try again.If the provider you're using has a GUI that comes with it,it is often helpful to open that and watch the machine, since theGUI often has more helpful error messages than Vagrant can retrieve.For example, if you're using VirtualBox, run `vagrant up` while theVirtualBox GUI is open.The primary issue for this error is that the provider you're usingis not properly configured. This is very rarely a Vagrant issue.解決方法等ございましたら、ご教示いただけませんでしょうか? (2015/10/04)
クジラ飛行机>環境構築失敗!さま:英語を見るともう一度挑戦してください。と述べられていますね。改めて、最初の手順から試してみてください。その際、このページの http://goo.gl/xDBt8y の部分、参考にしてみてください。なかぽんさま>casperjs、これから試してみます。少々お待ちください。 (2015/10/05)
クジラ飛行机なかぽんさま>手元のCentOSで再度試してみましたが、PhantomJS 1.98 + CasperJS 1.1.0-beta3 ですが、ご指摘のエラーはでません。実害があるわけではないようですので、--web-security=falseのoption追加で乗り切るか、あるいは、素直にバージョンアップすると良いでしょうか。1.9.x系でしたら、本書のプログラムを実行する上でも問題ないと思われます。 (2015/10/05)
環境構築成功!クジラ飛行机様のアドバイスに従って手順を見直してみました。その際、PCのBIOS設定で「Virtualization …」という所を「enable」にしてからもう一度「vagrant up」と実行してみると起動することができました!これで先に進むことができます。本当にありがとうございました。 (2015/10/05)
やんきち最近この本を購入しまして勉強中でございます。ちょっと質問があります。「第7章 人口無能を作ろう」のところなんですが、chat-server.jsを実行した後、localhost:1337にアクセスしても接続できません。何が悪いのかが分からず困っています。まずP332の「プログラムの実行方法」のところの「npm install」もエラーが出ます。あと「Mongodb」も「ERROR: addr already in use」というエラーが出ます。どうすれば良いのか、ご教示頂ければ幸いです。よろしくお願いします。 (2015/10/27)
P32でのフォルダ共有エラー恐れいります。本書を購入し、環境構築を始めたのですが、詰まった状態にあります。P32のホスト・仮想マシン間でのフォルダ共有ですが、設定を行い再起動をしようとしても、下記のエラーが表示されて、先に進めない状況です。There are errors in the configuration of this machine. Please fixthe following errors and try again:vm:* The shared folder guest path must be absolute: guest_path* The host path of the shared folder is missing: host_path32ページにある「エラーが出る場合」のvboxリビルド、プラグインインストールも実行しましたが、上記エラーは解決しないままです。恐れ入りますが、解決法についてご教示頂ければ幸いです。 (2015/10/30)
P32でのフォルダ共有エラーたびたびすみません。見返して気づいたのですが、"host_path", "guest-path"は、各々任意のフォルダを指定すれば良いということでしょうか? 大変失礼しました・・・ (2015/10/30)
よろしくお願いしますかなりな初心者です。p49で実行できず困っています。windowsのコマンドプロンプトで cdコマンドを使ってプログラムを保存したディレクトリに移動して、Poderosa で node download node.js を実行しても、Last login: Fri Nov 6 13:19:50 2015 from ***** Welcome to your Vagrant-built virtual machine.[vagrant@localhost ~]$ node download-node.jsmodule.js:338 throw err; ^Error: Cannot find module '/home/vagrant/download-node.js' at Function.Module._resolveFilename (module.js:336:15) at Function.Module._load (module.js:278:25) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) at node.js:814:3[vagrant@localhost ~]$ node download-node.jsmodule.js:338 throw err; ^Error: Cannot find module '/home/vagrant/download-node.js' at Function.Module._resolveFilename (module.js:336:15) at Function.Module._load (module.js:278:25) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) at node.js:814:3と表示されます。「プログラムを実行したところ」のサンプルのように[vagrant@localhost 01-download]とならないことに原因があるのでしょうか? (2015/11/06)
よろしくお願いしますp49の件 解決しました。Poderosaの方にコマンドを書いてました。 (2015/11/07)
クジラ飛行机やんきちさん>ERROR: addr already in use」と出ていると言うことは、既に、ポート1337が利用されているということです。別のポート番号を使うようプログラムを書き換えるか、仮想マシンを再起動したりすると、案外動くかもしれません。 (2015/11/07)
クジラ飛行机他の皆さんも、問題が無事解決したとのことで良かったです!! (2015/11/07)
絶対読破!p92です。Poderosaで下記を実行したところ、パスワードを求められてるようですが、sudoのための設定があるのでしょうか?[vagrant@localhost ~]$ sudo yum install freetype[sudo] password for vagrant: (2015/11/08)
絶対読破!p59~の『画像ファイルを抽出してみよう』ですが、showimage.js dl-image.jsいずれも errorメッセージが出てしまいます。showlink-path.jsなどは正常に出力されます。 (2015/11/08)
絶対読破!仮想マシンではないnodeでプログラムを動かしていたことにきずきました(泣、、)。C:\Program Filesのnodeはアンインストールしました。それでp31に戻ってきたわけですが、poderosaで$sudo visudo  が[vagrant@localhost ~]$ su visudo su: user visudo does not existとなり、困っております。よろしくお願いいたします。 (2015/11/08)
絶対読破!p31 は sudo visudoは Vagrantfileの編集でconfig.vm.box = "geerlingguy/centos6"に変更することで解決できたようです。 (2015/11/09)
絶対読破!p59の「error」メッセージの原因はurlの最後の /イヌ の部分がカタカナのためか認識されずないことが原因だと思います。すべてアルファベットのurlで試したらうまくゆきました。 (2015/11/12)
yutackallp59 の件ですが、日本語のURL を URL エンコードしてないからですね。cheerio-httpcli のコードも確認しましたが、fetch では受け取った URL をそのままで request を実行しています。なので、url 定義後に、下記のコードを差し込めば、取得できますよ。url = encodeURI(url); (2015/11/15)
絶対読破!yutackallさま 試したところ取得できました。本当にありがとうございました。 (2015/11/16)
欲しい人ご著書はいつも大変勉強になります。それで、今回も…と思ったのですが、電子化はされるご予定はありますか?常時携帯したいのでご予定があれば電子版を待とうと思うのですが。どうか、ご検討をよろしくお願いします。 (2015/11/20)
奮闘する初心者p60の「リンクされている画像を全てダウンロードする」の指示通りにプログラムをつくると画像はダウンロードされますが、それら画像が開けませんでした。解決法を自力で探しましたがみつかりませんでした。 解決法がございましたらご教授願います。 (2015/11/21)
いきなり躓きましたvagrant up で「default: Box 'puphpet/centos65-x64' could not be found.」と出ました。https://atlas.hashicorp.com/boxes/search?utm_source=vagran..↑を見ると、「puphpet/centos65-x64」は存在するのですが、どうして見つからないのでしょうか?どうぞ、宜しくお願いいたします。 (2015/12/05)
クジラ飛行机> いきなり躓きました様。手元で、試してみたところ、問題なくダウンロードできています。ネットワークの問題でしょうか。あるいは、Vagrantのサーバーメンテナンスのタイミングだったとか・・・再チャレンジしてみて、うまくいくこと良いのですが。 (2015/12/15)
ピー初歩的な質問でもうわけないですがp032でVagrantfileの設定を変更したあとvagrant reloadとうつと[vagrant@localhost ~]$ vagrant reload-bash: vagrant: command not foundこのようなエラーがででそこから進めない状態です...解決方法がありましたらお願いします。 (2015/12/19)
ピー誤って仮想マシン上でvagrantコマンドうってました(笑)これから頑張って読んでいきたいと思います。失礼しました。 (2015/12/19)
いきなり躓きました回答ありがとうございます。改めてエラーメッセージを見ると、C:/HashiCorp/Vagrant/embedded/gems/gems/childprocess-0.5.6/lib/childprocess/windows/process_builder.rb:63:in `join': incompatible character encodings: Windows-31J and ASCII-8BIT (Encoding::CompatibilityError)こちらのエラーが原因のようで、ユーザ名が日本語になっていると起こる現象のようです。ただ、日本語ユーザ名は使用しておらず、回避策としてあった、VAGRANT_HOMEやVBOX_USER_HOMEの環境変数を設定してみましたがうまくいきませんでした。ただ、Vagrantを使うのが目的ではないので、Windowsに直接Node.jsをインストールして利用しています。本の内容については、まさにこういうことがしたかったので、非常にわくわくしながら、本を読み進めています。ありがとうございました。 (2015/12/22)
クジラ飛行机>いきなり躓きました様へ。Vagrantが動かないとのこと残念です。しかし、確かに、Windows+Node.jsでもプログラムを動かすことができます。ぜひ、楽しんで読み勧めてください!> ピー様。問題を自力で乗り越えたとのこと、お疲れ様でした! (2015/12/23)
test電子書籍・PDF版はないのですようか? (2015/12/25)
tmpp.94のscreenshot.jsについてご教示ください。サンプルコードを実行するとスクリーンショットは保存されるのですが、日本語がすべて"□"に文字化けしてしまいます。こちらの事象について具体的な対処方法等はありますでしょうか。開発環境は本書で紹介されているVirtualBoxとVagrantを用いております。 (2015/12/26)
npmp92のcasperjsをインストールした後にcasperjsを実行しても'python' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。と表示されて実行することができず困っています。 (2016/01/13)
kimp194の$ node leveldb-test.jsでつまづきました。以下のように、levelup()メソッドでデータベースを開くところでエラーになってしまいます。events.js:85 throw er; // Unhandled 'error' event ^OpenError: IO error: ./testdb: Invalid argument at /vagrant/node_modules/levelup/lib/levelup.js:119:34 at /vagrant/node_modules/abstract-leveldown/abstract-leveldown.js:39:16testdbはできているようなのですが?[vagrant@localhost 05-db]$ ls -la testdb合計 12drwxr-xr-x. 1 vagrant vagrant 238 1月 18 15:18 2016 .drwxr-xr-x. 1 vagrant vagrant 510 1月 18 15:18 2016 ..-rw-r--r--. 1 vagrant vagrant 0 1月 18 15:18 2016 000003.log-rw-r--r--. 1 vagrant vagrant 16 1月 18 15:18 2016 CURRENT-rw-r--r--. 1 vagrant vagrant 0 1月 18 15:18 2016 LOCK-rw-r--r--. 1 vagrant vagrant 93 1月 18 15:18 2016 LOG-rw-r--r--. 1 vagrant vagrant 41 1月 18 15:18 2016 MANIFEST-000001 (2016/01/19)
P49はじめまして$ node download-node.jsを実行すると以下のエラーが出で次に進めることができません。windows10です。module.js:338 throw err; ^Error: Cannot find module '/home/vagrant/download-node.js' at Function.Module._resolveFilename (module.js:336:15) at Function.Module._load (module.js:278:25) at Function.Module.runMain (module.js:501:10) at startup (node.js:129:16) at node.js:814:3 (2016/03/29)
ぼるしちWin10環境で、環境構築につまづいています。P31にある通り、node > 3 +5 enterをしても、8が表示されず、ブランクで改行されてしまいます。また、p49のdownload-node.jsの実行方法がわからない状況です。srcフォルダをどこに置けば実行できるのでしょうか?よろしくお願いします。 (2016/03/29)
ぼるしちすみません。自己解決できました!npmをpoderosaの中でインストールしていたのが原因でした。コマンドプロンプトでインストールすることで、2つとも解決しました。汚してしまったので、発言は削除していただいて結構です。 (2016/03/29)
バイソンp150のテキスト中の数値を探して、税金を8%を加算するというプログラムについてreturn Math.ceil(1.08 v) ではなく、return Math.ceil(1.08 * v) ではありませんか。2016年1月4日 初版第4版発行です。 (2016/03/31)
初心者ですが失礼しますP31の$ sudo visudo をPoderosaで実行するとSyntaxError: Unexpected identifier が出てきます。どうしたらいいでしょうか。フォルダの位置の問題でしょうか? (2016/04/20)
初心者ですが失礼しますすみません。再起動したら今度はコマンドが通りました。失礼しました。 (2016/04/20)
togorohpp.120-121 「Electronで一番簡単なアプリ作成手順」についてWin10 + node v4.4.5 環境下で electron-rebuilt をインストールしました(> electron -v の結果は v1.1.2).この状態で「> electron /path/to/easy-app/」とすると「Error: cannot find module 'app'」とエラーが出ます.試行錯誤したところ src/ch03/04-electron/easy-app/main.jp を以下のように書き換えると動きました.5,6c5,7< var app = require('app');< var BrowserWindow = require('browser-window');---> const electron = require('electron');> const {app} = electron;> const {BrowserWindow} = electron;9c10< var mainWindow = null;---> let mainWindow;15,17c16,17< mainWindow.loadUrl(TARGET_URL);< });<---> mainWindow.loadURL(TARGET_URL);> });ここに至るまでに「> npm -g install app」も実行しましたが,これが必要なのかは分かりません.以上,ご連絡まで. (2016/05/27)
上と同じ「> npm -g uninstall app」実行後も「> electron /path/to/easy-app/」で動きました. (2016/05/27)
katoお世話になっております。katoと申します。P352の「SVMファイルを学習させてモデルを作成する」の部分ですが「node-svm train train-mini.svm train-mini.model」を実行したところ以下エラーが出てモデルが作れない状態です。なにかアドバイスをいただければと考え書き込ませていただきました。よろしくお願いいたします。—環境はMacOS10.10.5以下になります。node-svm version: 2.1.8Node version: 0.12.3OS: Darwin 14.5.0 x64—エラー内容:[RangeError: Invalid array length]node-svm error Invalid array lengthStack trace:RangeError: Invalid array lengthat Object.rep (/Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/node_modules/numeric/numeric-1.2.6.js:386:25) at /Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/lib/util/read-dataset.js:39:29 at Function._.map._.collect (/Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/node_modules/underscore/underscore.js:172:24) at _.(anonymous function) [as map] (/Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/node_modules/underscore/underscore.js:1496:34) at readLibsvm (/Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/lib/util/read-dataset.js:38:10) at /Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/lib/util/read-dataset.js:58:28 at _fulfilled (/Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/node_modules/q/q.js:834:54) at self.promiseDispatch.done (/Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/node_modules/q/q.js:863:30) at Promise.promise.promiseDispatch (/Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/node_modules/q/q.js:796:13) at /Users/katotakashi/.nodebrew/node/v0.12.3/lib/node_modules/node-svm/node_modules/q/q.js:604:44 (2016/05/31)
KuroP93のサンプルプログラムを実行すると「I'm `fs` modules」と出て、プログラムが正常に動かず困っております。何が問題でしょうか。 (2016/06/13)
datusyoこんばんは、プログラミング初心者です。お忙しいところ申し訳ありませんが、p82で設定している環境変数についてお聞きしたいです。p82では、PATH=/usr/local/bin:/usr/bin/:/binNODE_PATH=/usr/lib/node_modules/0 7 * * * node /path/to/kawase-usd_jpy.jsとなっておりますが、nodeのパスが通っていないらしく、現在、フルパスでやってなんとか動かしている状況です。動きは問題なかったものの、パスが環境変数で通っていないことに対し、非常にモヤモヤしているので、もしよければ教えて頂ければ大変幸いです。何卒よろしくお願い致します。 (2016/07/13)
datusyo上記解決致しました。PATHにnodeにwhichしたパスを通すことでnodeコマンドが使えるようになりました。ありがとうございます。 (2016/07/14)
yupiroP60の下段プログラムdl-image.jsの26行目の正規表現の部分は(/[^a-zA-Z0-9\.] +/g, '_') => (/[^a-zA-Z0-9\.]/g, '_')のように"+"を取ったら動いたのですが、これで正しいですか?よろしくお願いします。非常に興味深い本をありがとうございます。 (2016/07/20)
hogepiyo自分も tmpさんと同様にp.94のscreenshot.jsの実行結果が文字化けしました。下記の手順で日本語フォントの設定を行ったところ日本語が表示されるようになりました。http://qiita.com/n-takahashi/items/3dd810ebdf236fce6f13 (07/29)
jackP32の「ホストマシンと仮想マシンでフォルダを共有する」というのは、config.vm.synced_folder "host_path", "guest_path"を、実際には、どのように指定すればよいのでしょうか? (08/12)
jackP33の、「ホストマシンで開発し、仮想マシンで実行する」というのは、具体的に、どうすればよいのでしょうか? (08/12)
madaop.94の文字化けの件ですが$ sudo yum install vlgothic-fontsで日本語フォントを入れると治りました (08/13)
auty第3章 02-login の getfav.jsの実行についてお尋ねします。(P102)初心者なので適切に質問できるかわかりませんが、よろしくお願いします。vagrantを使った,CentOSではうまく動くようですが、Windows版では、mypage url=http://uta.pw/sakusibbs/users.php?action=login&--- favlist ---のみの出力となります。user_id=32が取れていないようですが、どこに原因があるかご教授いただければ幸いです。 (08/25)
うおおおP37のnanoエデシターをインストールのところでエラーが出ます[vagrant@localhost ~]$ sudo yum install nanoSetting up Install Processhttp://mirror.centos.org/centos/6/SCL/x86_64/repodata/repo..: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"Trying other mirror.Error: Cannot retrieve repository metadata (repomd.xml) for repository: scl. Please verify its path and try again (10/10)
素人思考p203のサンプルプログラムhtml2pdf.jsを実行してみたのですが、できたtest.pdfが変です。「やまなし」の内容は表示されず、全5ページが白紙状態です。どこかにエラーがあるのでは? (10/30)
名無し侍p60のの「リンクされている画像をすべてダウンロードする」ですが、ウィキペディアは現在HTTPSに移行しているため、次のようにしてみました。・「var url」は実際にウィキペディアのイヌページからコピペ・「var fname = URL.parse(src).pathname」はエンコードされているためdecodeURIComponent(fName)でデコードする (12/04)
Name: