【发布时间】:2014-01-07 00:38:17
【问题描述】:
我的硬盘上有一些 html 文件,我想使用 jquery 从中提取数据。这可以使用cheerio吗?我试过给cheerio 本地路径,但它不起作用。我的一个想法是在节点中创建一个 Web 服务器,从 html 文件中读取,然后通过服务器将其通过管道传输到cheerio - 这会不会
【问题讨论】:
标签: jquery html node.js local cheerio
我的硬盘上有一些 html 文件,我想使用 jquery 从中提取数据。这可以使用cheerio吗?我试过给cheerio 本地路径,但它不起作用。我的一个想法是在节点中创建一个 Web 服务器,从 html 文件中读取,然后通过服务器将其通过管道传输到cheerio - 这会不会
【问题讨论】:
标签: jquery html node.js local cheerio
输入的是html字符串,所以需要自己读取html内容:
var fs = require('fs');
cheerio.load(fs.readFileSync('path/to/file.html'));
【讨论】:
可以使用fs 模块中的readFile 函数异步读取 html 文件。当文件读取完成后,回调函数将传递两个参数(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 数据是一个字符串。如果编码被省略,数据将是buffer。 load 函数仍然理解这一点,因为缓冲区在内部转换为字符串:
if (Buffer.isBuffer(content))
content = content.toString();
的文档
【讨论】:
扩展damphat 的答案使其适用于相对路径:
import fs from 'fs';
import path from 'path';
const filePath = path.join(__dirname, './path/to/file.html');
const $ = cheerio.load(fs.readFileSync(filePath));
【讨论】: