備忘録 Node.js初級編(JavaScrypt)

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(‘正常に書き込みが完了しました’);

        });

 

今後について

この年末年始は、ずっとローカル環境でサーバーを立ち上げて作業をする自主トレーニングをしていました。

私は、サーバーエンドのエンジニアを目指すことにしましたので、こうしたサーバーを使った作業は今後とも必須となってきます。

それでは、また。

コメントを残す