Node.jsにはfs
と呼ばれるモジュールがあり、ファイルを作成したり読み込んだりすることができます。
これを用いてインターネット上にある画像をダウンロードすることができます。
事前準備
Node.jsが使えるように環境構築する。
今回は初心者も簡単!UbuntuでNode.jsの環境構築で紹介した環境で実行する。
また、今回使用するモジュールをnpmコマンドでインストールします。
npm install fs request request-promise —-save
別にrequest-promise
を使わなくても実現できるのですが、今回はあえてrequest-promise
を用いて実装したいと思います。
なお、request-promise
を使うときは依存性の事情からrequest
もインストールするようにしましょう。
流れ
非常にシンプルです。
- 画像のURLを定義する
-
fs.createWriteStream
で書き込みファイルを用意する - URLにリクエストを送り、取得した内容をファイルに書き込む
実装すると以下のようになります。
const rp = require('request-promise');
const fs = require('fs');
// Downloadしたい画像のURLを記載
const url = 'http://www.example.com/hoge.jpg'
// ファイル名を記載
// 事前にimgディレクトリを用意する必要がある
const file = fs.createWriteStream('./img/hoge.jpg');
// URLにアクセスしてファイルに書き込む
rp(url).pipe(file);
あとは以下コマンドでファイルを実行するとimgディレクトリ内に画像ファイルが格納されます。
node index.js
個人用メモ
URLにアクセスしたとき、バイナリデータを受け取り、そのバイナリデータをファイルにpipe
することでファイルに画像情報が書き込まれ、そのファイルを開くと画像が表示される。つまり画像のダウンロードというのはインターネットから画像情報をバイナリ形式で受け取り、その内容を作成したファイルに書き込むことだということか。
よくわかっていないけど。
まとめ
とりあえずnode.jsを用いて画像をインターネットからダウンロードできるようになりました。
これとNode.jsでニュース記事をWebスクレイピングしてみようの内容を組み合わせることで画像も出力できるスクレイピングプログラムが書けるようになります。
近々試してみようと思います。