30

我的硬盘上有一些 html 文件,我想使用 jquery 从中提取数据。这可以使用cheerio吗?我试过给cheerio 本地路径,但它不起作用。我的一个想法是在节点中创建一个 Web 服务器,从 html 文件中读取,然后通过服务器将其通过管道传输到cheerio - 这会不会

4

3 回答 3

69

输入是一个html字符串,所以需要自己读取html内容:

var fs = require('fs');

cheerio.load(fs.readFileSync('path/to/file.html'));
于 2013-12-18T17:53:38.220 回答
10

可以使用模块中的函数异步读取 html 文件。当文件读取完成后,回调函数将传递两个参数。readFilefs(err, data)

接收到data的包含html内容,可以简单地传递给cheerioload函数。

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 被指定为可选的第二个参数,所以typeof数据是一个字符串。如果编码被省略,数据将是一个缓冲区。load 函数仍然理解这一点,因为缓冲区在内部转换为字符串:

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

fs.readFile()的文档

于 2018-12-12T20:04:16.967 回答
1

扩展damphat的答案以使其适用于相对路径:

import fs from 'fs';
import path from 'path';

const filePath = path.join(__dirname, './path/to/file.html');
const $ = cheerio.load(fs.readFileSync(filePath));

于 2020-08-06T18:47:44.910 回答