[node.js] node-html-parser로 HTML에서 텍스트만 추출할 때 script, code 태그 내용을 제거하는 방법

node.js로 HTML 문서 문자열 데이터에서 태그를 제거하고 텍스트 내용만을 가져오려면 다음과 같이 코드를 작성합니다. 가장 대중적으로 사용하는 파서 패키지는 node-html-parser 입니다.

node.js로 HTML 문서 문자열 데이터에서 태그를 제거하고 텍스트 내용만을 가져오려면 다음과 같이 코드를 작성합니다.

가장 대중적으로 사용하는 파서 패키지는 node-html-parser 입니다.

const parser =  require('node-html-parser');
let html = '<html><p>HTML Text</p></html>';

//HTML 문자열을 DOM으로 파싱
let dom = parser.parse(html);
//텍스트만 출력
console.log(dom.textContent);

콘솔출력
--------
HTML Text

다만, 생성한 DOM에서 textContent로 텍스트 데이터를 가져오면 script, code 태그 안의 코드는 일반 텍스트로 인식되어 삭제되지 않고 그대로 출력되기 때문에 코드를 추가해서 별도로 처리를 해야 온전한 텍스트를 얻을 수 있습니다.

다음처럼 script, code 태그가 있는 HTML 문자열은 node-html-parser로 DOM으로 만든 후 텍스트 데이터를 얻으면 code, script 태그의 내용이 그대로 출력됩니다.

const parser =  require('node-html-parser');
let html = '<html><p>HTML Text</p><code></code><script>const i=0;</script></html>';

//HTML 문자열을 DOM으로 파싱
let dom = parser.parse(html);
console.log(dom.textContent);

콘솔출력
--------
HTML Textvar i=0;const j=0;

querySelectorAll() 함수로 script, code 태그를 선택해서 루프문으로 DOM에서 모두 삭제하려면 다음처럼 코드를 추가합니다.

const parser =  require('node-html-parser');
let html = '<html><p>HTML Text</p><code></code><script>const i=0;</script></html>';

//HTML 문자열을 DOM으로 파싱
let dom = parser.parse(html);

//script, code 태그 제거
dom.querySelectorAll('script, code').forEach(x=> x.remove());

console.log(dom.textContent);

콘솔출력
--------
HTML Text