我可以在 node.js 中使用cheerio 包加载本地 html 文件吗?
Posted
技术标签:
【中文标题】我可以在 node.js 中使用cheerio 包加载本地 html 文件吗?【英文标题】:Can I load a local html file with the cheerio package in node.js? 【发布时间】:2014-01-07 00:38:17 【问题描述】:我的硬盘上有一些 html 文件,我想使用 jquery 从中提取数据。这可以使用cheerio吗?我试过给cheerio 本地路径,但它不起作用。我的一个想法是在节点中创建一个 Web 服务器,从 html 文件中读取,然后通过服务器将其通过管道传输到cheerio - 这会不会
【问题讨论】:
【参考方案1】:输入的是html字符串,所以需要自己读取html内容:
var fs = require('fs');
cheerio.load(fs.readFileSync('path/to/file.html'));
【讨论】:
这应该添加到文档中 如何从我的项目目录中的相对路径进行这项工作?这对我不起作用。【参考方案2】:可以使用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();
fs.readFile()
的文档【讨论】:
【参考方案3】:扩展damphat
的答案使其适用于相对路径:
import fs from 'fs';
import path from 'path';
const filePath = path.join(__dirname, './path/to/file.html');
const $ = cheerio.load(fs.readFileSync(filePath));
【讨论】:
以上是关于我可以在 node.js 中使用cheerio 包加载本地 html 文件吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何从Google Cloud Function(Cheerio,Node.js)发出多个http请求