Node.jsのexpressによるウェブスクレイピング処理
こんにちは、関西在住で主夫歴5年越のYUJIです。
家事や子育てで、皆さんも毎日忙しい日々をお過ごしですか?
私は、プログラミング初学者として、フルタイムで働きながらの勉強を続けています。
今日は、コンピュータ言語の一つであるJavaScriptから「Node.js」の「express」を触りましたので、その成果のご紹介をさせていただきますね。

教材について
この教材は、YouTubeにアップされている「プログラミングチュートリアル」さんの「超簡単!自作でWEBスクレイピングアプリ」になります。
この方の解説は、適切かつ分かりやすいです。
かなり参考にさせてもらっています。
私のトレーニング内容について
私は、こんな感じでexpressを使ったウェブスクレイピング処理をしてみました。
1 terminal > mkdir (作成するフォルダ名)
2 terminal > cd (作成したフォルダ名)
3 terminal > code .
ここで、VSCを呼び出しました。
以下、VSCを使います。
4 npm init で初期化 > 設定はそのまま
5 npm install して
6 npm install express で express を召喚
npm i axis でaxisを召喚 (ミドルウェア)
npm i cheerioを召喚 (ミドルウェア)
package.json が生成されます
package.json > axis / cheerio が生成されます。
以下、package.jsonを触ります。
7 package.jsonの test以下を、dev: “node index.js”に修正し、保存
index.jsファイル生成
以下、index.jsのソースコードを生成します。
8 expressをconstで定義し、require()で ”express” を召喚
9 PORTをconstで定義し、任意の番号付与
10 appをconstで定義し、express()で起動
11 サーバー起動に、app.listen()で、PORTを引数、処理はconsole.log(“(任意)”)とします
12 terminal で npm run dev でサーバー起動
以下、index.js でウェブスクレイピング処理のソースコード生成をします。
13 URLをconstで定義し、任意のサイトURL(例えば、楽天市場ウェブサイト)を貼り付け
14 axisでURLを指定し、then((response))でアロー関数、htmlParserをconst定義し、response.dataを充てます。
合わせて$をconst定義し、cheerioのload(htmlparser)を行います。
$は、対象要素内のクラス(今回は、searchresultitemなど)をhtmlParserでインスタンス化し、.each()で関数を後処理します。その際、スクレイピング対象のもの(今回は、title/price)をconst定義し、テキスト化データを探します。
次に、そのデータをdata.push({ / });で配列データに挿入し、console.log(data)で、コンソール内に配列表示します。
念のため、エラー処理で、エンドに.catch()を設定し、errorをアロー関数でlog表示します。
<その他 プラスアルファ>
15 テキストへの書き込みについて(成功)
dataを output するために、fsを定義して、dataをstringifyでJSON変換した上で、data_WR.txtに書き込めるようにしました(WRはWriteの略としています。)。
(本当はCSVやエクセルデータに落とし込みたかったですが、難しかったので、ペンディングとしました。)
コードは、こんな感じです。
const fs = require(“fs”)
const data_WR = JSON.stringify(data);
fs.writeFile(‘data_WR.txt’, data_WR, (err) => {
if (err) throw err;
console.log(‘正常に書き込みが完了しました’);
});

今後について
この年末年始は、ずっとローカル環境でサーバーを立ち上げて作業をする自主トレーニングをしていました。
私は、サーバーエンドのエンジニアを目指すことにしましたので、こうしたサーバーを使った作業は今後とも必須となってきます。
それでは、また。
