Node.jsでHTMLの要素取得
Node.jsを使用してWebサイトのHTML内の要素やテキストを調べて取得したいことがある。
Node.jsはhttpsをrequireすれば簡単にHTMLを取得できる。(httpsのみ)
// sample.js const https = require('https'); const url = 'https://iwb.jp/foo/'; https.get(url, res => { let html = ''; res.on('data', line => html += line); res.on('end', () => { console.log(html); }); });
node sample.js
結果をHTMLファイルで保存する場合は
node sample.js > sample.html
document.querySelectorを使いたい
単純にHTMLを取得するだけなら前述の方法で問題ないが、この方法だと例えば#item > li:last-childにあるテキストだけ取得するようなことはできない。
<!-- HTML例 --> <ul id="item"> <li>list1</li> <li>list2</li> <li>list3</li> </ul>
jsdomでdocument.querySelectorを使う
もしもdocument.querySelectorなどを使って特定の要素を指定したい場合はjsdomを使用する。
まず npm i jsdom でインストール。
その後requireで読み込んで以下のように記述するだけだ。
const https = require('https'); const jsdom = require('jsdom'); const { JSDOM } = jsdom; const url = 'https://iwb.jp/foo/'; https.get(url, res => { let html = ''; res.on('data', line => html += line); res.on('end', () => { const dom = new JSDOM(html); console.log(dom.window.document.querySelector('#item > li:last-child').textContent); // => list3 }); });
JavaScript実行後のHTMLを簡単に取得したい場合はPuppeteerなどを使用する必要がある