私はこれが以前に尋ねられたことを知っていますが、node.jsの良い答えを見つけることができません
フェッチされたHTMLページからプレーンテキスト(タグ、スクリプトなどなし)を抽出するには、サーバー側が必要です。
JQueryを使用してクライアント側でそれを行う方法(bodyタグの.text()コンテンツを取得する)を知っていますが、サーバー側でこれを行う方法がわかりません。
https://npmjs.org/package/html-to-text を試しましたが、これはスクリプトを処理しません。
var htmlToText = require('html-to-text');
var request = require('request');
request.get(url, function (error, result) {
var text = htmlToText.fromString(result.body, {
wordwrap: 130
});
});
Phantom.jsを試しましたが、プレーンテキストを取得する方法が見つかりません。
jsdom およびjQuery(サーバー側)を使用します。
JQueryを使用すると、すべてのスクリプト、スタイル、テンプレートなどを削除してから、テキストを抽出できます。
例
(これはjsdomとnodeではテストされていません。Chromeでのみテストされています)
jQuery('script').remove()
jQuery('noscript').remove()
jQuery('body').text().replace(/\s{2,9999}/g, ' ')
TextVersionJS( http://textversionjs.com )を使用して、HTML文字列のプレーンテキストバージョンを生成できます。これは純粋なJavaScript(大量の正規表現を含む)であるため、ブラウザーやnode.jsでも使用できます。
このライブラリはニーズに応じて機能する場合がありますが、[〜#〜]ではありません[〜#〜]で要素のテキストを取得するのと同じです。ブラウザ。その目的は、HTMLメールのテキストバージョンを作成することです。これは、画像のようなものが含まれていることを意味します。たとえば、次のHTMLとコードスニペットがあるとします。
var textVersion = require("textversionjs");
var htmlText = "<html>" +
"<body>" +
"Lorem ipsum <a href=\"http://foo.foo\">dolor</a> sic <strong>amet</strong><br />" +
"Lorem ipsum <img src=\"http://foo.jpg\" alt=\"foo\" /> sic <pre>amet</pre>" +
"<p>Lorem ipsum dolor <br /> sic amet</p>" +
"<script>" +
"alert(\"nothing\");" +
"</script>" +
"</body>" +
"</html>";
var plainText = textVersion.htmlToPlainText(htmlText);
変数plainText
には次の文字列が含まれます。
Lorem ipsum [dolor] (http://foo.foo) sic amet
Lorem ipsum ![foo] (http://foo.jpg) sic amet
Lorem ipsum dolor
sic amet
スクリプトタグを適切に無視することに注意してください。 ソースコード の最新バージョンはGitHubにあります。
別の回答が示唆しているように、JSDOMを使用しますが、jQueryは必要ありません。これを試して:
JSDOM.fragment(sourceHtml).textContent