0

cheerioとnode.jsを使用してWebページを解析し、cssセレクターを使用してその上のデータを検索しています。Cheerioは、不正な形式のhtmlではあまりうまく機能しません。jsdomの方が寛容ですが、どちらも動作が異なり、特定の場合にもう一方が正常に機能すると、両方が機能しなくなるのを確認しました。

Chromeは、DOMの作成において同じ不正な形式のhtmlでうまく機能しているようです。

不正な形式のHTMLからDOMを作成するChromeの機能を複製し、このDOMの「クリーンな」html表現を処理のためにcheerioに渡すにはどうすればよいですか?

このようにして、取得したhtmlが整形式であることがわかります。page.contentを設定してphantomjsを試しましたが、page.contentの値を読み取っても、htmlの形式が正しくありません。

4

2 に答える 2

1

したがって、 https://github.com/aredridel/html5/を使用できます。これは、はるかに寛容であり、私の経験から、jsdomが失敗した場合に機能します。

しかし、前回テストしたとき、数か月前は非常に遅かった。良くなったといいのですが。次に、phantomjsプロセスを生成し、ノードにフィードバックするデータのjsonをstdoutに出力する可能性もあります。

于 2012-08-16T07:05:14.917 に答える
0

これは、phantomjs-nodeとjqueryを使用して、うまくいくようです。

function cleanHtmlWithPhantom(html, callback){
    var phantom = require('phantom');
    phantom.create(
        function(ph){
            ph.createPage(
                function(page){
                    page.injectJs(
                        "/some_local_location/jquery_1.6.1.min.js",
                        function(){
                            page.evaluate(
                                function(){
                                    $('html').html(newHtml)
                                    return $('html').html();
                                }.toString().replace(/newHtml/g, "'"+html+"'"),
                                function(result){
                                    callback("<html>" + result + "</html>")
                                    ph.exit();
                                }
                            )
                        }
                    );
                }
            )
        }
    )
}

cleanHtmlWithPhantom(
    "<p>malformed",
    function(newHtml){
        console.log(newHtml);
    }
)
于 2012-08-16T08:39:34.517 に答える