17

これが以前に尋ねられたことは知っていますが、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 を試しましたが、プレーン テキストを取得する方法が見つかりません。

4

5 に答える 5

5

別の回答が示唆しているように、JSDOM を使用しますが、jQuery は必要ありません。これを試して:

JSDOM.fragment(sourceHtml).textContent
于 2018-07-03T04:32:33.580 に答える
3

TextVersionJS ( http://textversionjs.com ) を使用して、HTML 文字列のプレーン テキスト バージョンを生成できます。これは純粋な JavaScript (大量の RegExps を使用) であるため、ブラウザーや 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

script タグを適切に無視することに注意してください。ソース コードの最新バージョンはGitHub にあります。

于 2016-07-27T12:18:19.170 に答える
-5

body タグの textContent を取得しないのはなぜですか?

var body = document.getElementsByTagName('body')[0];
var bodyText = body.textContent;
于 2013-11-14T18:52:47.210 に答える