我正在用cheerio抓取文件目录,并且需要所有这些数据以一个.json文件结尾。
我可以将所有数据很好地进行控制台。我看到了我需要的所有内容,当我尝试将其写入文件时,我一无所有,或者只有一个文件。我已经尝试过async / await,promise,fs.writeFile和fs.createFileStream。我现在很困惑。
const fs = require('fs');
const cheerio = require('cheerio');
const { findContent } = require('./getItems.js');
const writeStream = fs.createWriteStream('data.json');
const FileHound = require('filehound');
const files = FileHound.create()
.paths('./public')
.ext('html')
.find((err, noFilesFound) => {
if (err) {
console.log(error);
} else {
console.log(noFilesFound)
}
})
.then(files => {
files.forEach(function (file) {
fs.readFile(file, 'utf-8', function (err, data) {
if (err) {
throw err;
} else {
const items = [];
var $ = cheerio.load(data)
const result = findContent($, true);
console.log(result);
items.push(JSON.stringify(result))
}
})
})
})
这可以满足我的所有需求。
我不知道如何写数据
writeStream.write(items,'UTF8');
我收到大块错误消息,或者未定义项,...
答案 0 :(得分:0)
这是因为要在回调中添加它们。像这样尝试:
let items = [];
let $
let data
let result
;(async function(){
let files = await glob(...)
for(var file of files){
data = fs.readFileSync(file)
$ = cheerio.load(data)
result = findContent($, true);
console.log(result);
items.push(result)
}
fs.writeFileSync(filename, JSON.stringify(items))
})()
答案 1 :(得分:0)
我不知道为什么,但是现在看来这行得通。
const fs = require('fs');
const cheerio = require('cheerio');
const { findContent } = require('./getItems.js');
const writeStream = fs.createWriteStream('data.json', 'utf8');
const FileHound = require('filehound');
const files = FileHound.create()
.paths('./public')
.ext('html')
.find((err, htmlFiles) => {
if (err) return console.error('handle err', err);
htmlFiles.forEach(function (file) {
fs.readFile(file, 'utf-8', function (err, data) {
if (err) {
throw err;
} else {
var items = [];
var $ = cheerio.load(data)
const result = findContent($, true);
items.push(result)
writeStream.write(JSON.stringify(items));
}
})
})
})
和glob
const fs = require('fs');
const cheerio = require('cheerio');
const { findContent } = require('./getItems.js');
const writeStream = fs.createWriteStream('data.json', 'UTF8');
const glob = require('glob');
glob('./public' + '/**/*.html', {}, (err, files) => {
if (err) {
console.log('error finding files')
} else {
files.forEach(function (file) {
fs.readFile(file, 'utf-8', function (err, data) {
if (err) {
throw err;
} else {
var items = [];
var $ = cheerio.load(data)
const result = findContent($, true);
items.push(result)
writeStream.write(JSON.stringify(items));
}
})
})
}
})