Node.js で jsdom を利用して HTML からテキストを抽出する方法のメモ。
dom = new JSDOM(...) で DOM を生成すると、dom.window.document で HTML の DOM ツリーを参照できます。
nodeType が TEXT_NODE の場合に、nodeValue に格納されているテキストを抽出します。
■プログラム
■実行結果
dom = new JSDOM(...) で DOM を生成すると、dom.window.document で HTML の DOM ツリーを参照できます。
nodeType が TEXT_NODE の場合に、nodeValue に格納されているテキストを抽出します。
■プログラム
const jsdom = require('jsdom'); // 以下が対象の HTML const html = ` <html> <head> <title>test</title> <meta keyword="kw1, kw2, kw3"> </head> <body> abc <div>div1-1</div> <div>div2-1<div>div2_2-1</div>div2-2</div> <div>div3-1</div> xyz </body> </html> `; // DOM 生成 const dom = new jsdom.JSDOM(html); // 再帰的に DOM ツリーをたどってテキストを抽出 function get_texts(node, texts=[]) { if (node.nodeType === node.TEXT_NODE) { texts.push(node.nodeValue); } else if (node.nodeType === node.ELEMENT_NODE) { for (const child of node.childNodes) { get_texts(child, texts); } } return texts; } const doc = dom.window.document; const texts = get_texts(doc.body); console.log(texts);
■実行結果
[ '\nabc\n', 'div1-1', '\n', 'div2-1', 'div2_2-1', 'div2-2', '\n', 'div3-1', '\nxyz\n\n\n' ]