【问题标题】:Can I load a local html file with the cheerio package in node.js?我可以在 node.js 中使用cheerio 包加载本地 html 文件吗?
【发布时间】:2014-01-07 00:38:17
【问题描述】:

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

【问题讨论】:

    标签: jquery html node.js local 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));
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-07
        • 2020-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多