Nodejsのrequestとfsライブラリを使って、データダウンロードをする方法

Pocket
LINEで送る
GREE にシェア
LinkedIn にシェア

WEBサイトスクレイピングをやっていると、画像データやPDFなどの資料系をダウンロードしたくなることがある。
 

そんな時は、慌てず騒がず、Nodejsの標準ライブラリだけで、簡単に行うことができます。
 

そして、ダウンロードするデータに任意の名前をつけたり、特定の処理をコールバックさせたい場合に値やfunctionを送る方法も含めて、簡単なライブラリを作っておきました。

データダウンロードするソースコード

 

 

実行プログラムは、トヨタ自動車の決算資料(pdf)をダウンロードしてみました。

簡単解説

デモは、ライブラリを読み込んで、それを実行しているだけなんですが、ライブラリを読み込んだdownload関数に「ダウンロードするURL」と「ダウンロード後に保存するファイル名(パス)」を引数として渡して上げると、ダウンロードしてファイルをfsライブラリで書き出してくれるという内容になっています。
 

ライブラリの特性として、ダウンロードしたURLを任意のファイル名にする為に、request関数内にファイル名を受け渡す必要があったので、requestの第1引数に受け渡す値を追加しています。
 

 

“saveFile:saveFile”の箇所ですね。
 

右辺は、送り込む変数で、左辺がrequestで受け取った後の変数になります。
同じにしているので、ややこしいかもしれませんが、この辺は使い慣れてください。
 

そして、request側で受け取る変数はそのままでは使えず、”response.request.saveFile”という階層で取り出すことができるようになります。
 

この辺はお作法として覚えておくだけでいいのですが、ここに関数を入れて送り込むことも可能です。
 

ダウンロード後にいろいろなコールバック関数を実行させたい時は、ここにどんどん追加してみてください。

この処理で広がる世界

とりあえず、必要に狩られて作ったライブラリですが、単体でダウンロードできるライブラリがnodejsに無いというのもちょっとだけ驚きましたが、クローリングなどをシステム開発する人は、比較的よく使う技術なのではないかと考えられます。
 

株価関連のシステムを組む時などは、PDFファイルでのデータのやりとりは普通に行われる為、PDFをさらにデータ検索して、任意の文字列を取り出すという事も可能になります。
※ただし、バイナリ分解などをするのは、それだけで別の技術が必要になります。
 

また、画像を定期的にクローリングするような場合にもこのダウンロード処理をnodejsでcronしておくだけで、簡単に実現できます。
 

え?cronでwgetやcurlするだけでいい?
・・・う、痛いところ突かれましたね。
 

コマンドが叩けるのであれば、確かにそれでもいいし、”child_process”というライブラリを使って、nodejsから直接コマンドを実行してもいいかもしれません。
 

それでもnodejs内でスマートにダウンロードを行いたい人や、コールバック関数を実行させたい人向けのライブラリなので、使いたい人のみ便利に使ってくだされ。

Leave a Reply

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です