我可以在 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 文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Node.js 和 Cheerio 抓取公司名称

如何从Google Cloud Function(Cheerio,Node.js)发出多个http请求

node.js 使用 superagent 与 cheerio 完成简单爬虫

在node.js中的Webscraper,JS修改了DOM

如何使用 node.js 抓取具有动态内容的页面?

新手的node爬虫初体验