У меня есть несколько html-файлов на жестком диске, из которых я хотел бы использовать jquery для извлечения данных. Возможно ли это сделать с помощью Cheerio? Я пытался дать Cheerio локальный путь, но он не работает. Одна из идей, которые у меня были, заключалась в том, чтобы создать веб-сервер в узле, прочитать из html-файла, а затем передать его на cheerio через сервер - будет ли это
Могу ли я загрузить локальный HTML-файл с пакетом cheerio в node.js?
Ответы (3)
Ввод представляет собой строку html, поэтому вам нужно самостоятельно прочитать содержимое html:
var fs = require('fs');
cheerio.load(fs.readFileSync('path/to/file.html'));
person
damphat
schedule
18.12.2013
Это должно быть добавлено в документацию
- person forloop; 28.03.2016
как мне заставить это работать с относительным путем в каталоге моего проекта? это не сработало для меня.
- person lopezdp; 03.11.2019
HTML-файл можно прочитать асинхронно с помощью функции readFile
из модуля fs
. По окончании чтения файла функции обратного вызова передаются два аргумента (err, data)
.
Полученный data
содержит html-контент и может быть просто передан функции cheerio load
.
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
представляют собой строку. Если кодировка опущена, данные будут буфером. Тем не менее, функция загрузки понимает это, потому что буфер внутренне преобразуется в строку с:
if (Buffer.isBuffer(content))
content = content.toString();
Документация по fs.readFile()
person
Tobi Obeck
schedule
12.12.2018
Расширение ответа damphat
, чтобы он работал для относительных путей:
import fs from 'fs';
import path from 'path';
const filePath = path.join(__dirname, './path/to/file.html');
const $ = cheerio.load(fs.readFileSync(filePath));
person
rehman_00001
schedule
06.08.2020