web-dev-qa-db-ja.com

node.jsのcheerioパッケージでローカルのhtmlファイルをロードできますか?

ハードドライブにいくつかのhtmlファイルがあり、jqueryを使用してデータを抽出します。これはcheerioを使用して実行できますか? cheerioにローカルパスを指定してみましたが、機能しません。私が持っていた1つのアイデアは、ノードにWebサーバーを作成し、htmlファイルから読み取り、サーバーを介してそれをcheerioにパイプすることでした-これは

24
Jpaji Rajnish

入力はhtml文字列なので、自分でhtmlコンテンツを読み取る必要があります。

var fs = require('fs');

cheerio.load(fs.readFileSync('path/to/file.html'));
62
damphat

readFileモジュールのfs関数を使用して、htmlファイルを非同期に読み取ることができます。ファイルの読み取りが完了すると、コールバック関数に2つの引数(err, data)が渡されます。

受け取ったdataにはHTMLコンテンツが含まれており、単純にcheerio load関数に渡すことができます。

var cheerio = require('cheerio');
var fs = require('fs'); 

fs.readFile('path/to/file.html', 'utf8', function(err, data) {

    if (err) throw err;

    var $ = cheerio.load(data);
    console.log($.html());
});

補足:エンコーディングutf8がオプションの2番目の引数として指定されているため、typeofデータは文字列です。エンコードが省略されている場合、データは buffer になります。それでもロード関数はこれを理解します。これは、バッファーが内部で文字列に変換されるためです。

if (Buffer.isBuffer(content))
  content = content.toString();

fs.readFile()のドキュメント

5
Tobi Obeck