Node.jsでスクレイピングする方法

まず適当なディレクトリを作成して移動


mkdir scraping
cd scraping

npm初期化


npm init -y

node-fetchjsdomをインストール
※jsdomは Node.js v12以降が必要です


npm i node-fetch jsdom -D

ES Modules (ESM)を有効にする

node-fetchはver3からES Modules (ESM)専用になったので実行ファイルの拡張子を.mjsにするかpackage.jsonに"type": "module"を追加してES Modules (ESM)を有効にする必要があります。
今回は"type": "module"を追加する方法で行きます。


{
    "name": "scraping",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "jsdom": "^19.0.0",
        "node-fetch": "^3.1.0"
    },
    "type": "module"
}

実行ファイル(index.js)の作成


touch index.js

サンプルプログラムを作成

以下はexample.comのh1テキストを取得するコードになります。


import fetch from "node-fetch";
import jsdom from "jsdom";
const { JSDOM } = jsdom;

(async () => {
    const res = await fetch("http://example.com");
    const body = await res.text(); // HTMLをテキストで取得
    const dom = new JSDOM(body); // パース
    const h1Text = dom.window.document.querySelector("h1").textContent; // JavaScriptと同じ書き方ができます。
    console.log(h1Text); // Example Domain
})();

実行

実行するとh1のテキスト”Example Domain”がログに出力されます。


node index.js
Example Domain

参考