fs.writeFile 创建空文件 (node.js)
fs.writeFile creating empty files (node.js)
我正在尝试使用 node.js、cheerio 和 puppeteer 编写抓取脚本。
我目前遇到的问题是如何让 writeFile()
功能正常工作。
const puppeteer = require('puppeteer');
const $ = require('cheerio');
const fs = require('fs');
const url = 'https://www.made-up-url.com/';
puppeteer
.launch()
.then(function(browser) {
return browser.newPage();
})
.then(function(page) {
return page.goto(url).then(function() {
return page.content();
});
})
.then(function(html) {
let scrapedTitle = $('h1', html).each(function() {
return $(this).text();
});
let scrapedDesc = $('#something-else > div > p', html).each(function() {
return $(this).text();
});
// Both console logs are outputted as strings, as expected
console.log(scrapedTitle[0].children[0].data); // "Some title"
console.log(scrapedDesc[0].children[0].data); // "The description is like this."
fs.writeFile("data.json", JSON.stringify(scrapedTitle[0].children[0].data), 'utf8', function(err) {
if(err) {
return console.log(err);
}
console.log("The data has been scraped and saved successfully! View it at './data.json'");
});
process.exit();
})
.catch(function(err) {
console.log(err);
process.exit();
});
writeFile()
过去曾使用过类似 fs.writeFile("data.json", JSON.stringify(html), 'utf8', function(err) {
的东西,但现在这似乎也不起作用。当我 运行 这个脚本文件被创建时,正如预期的那样,但它总是空的,即使当两个 console.log()
显示应该有有效的字符串要写入时也是如此。没有错误。有什么想法吗?
你有下面这行,process.exit();
正在关闭文件写入操作之前的进程:
fs.writeFile("data.json", JSON.stringify(scrapedTitle[0].children[0].data), 'utf8', function (err) {
if (err) {
return console.log(err);
}
console.log("The data has been scraped and saved successfully! View it at './data.json'");
});
process.exit();
您可以将其更改为类似这样的内容,以便文件写入操作在您关闭它之前完成:
fs.writeFile("data.json", JSON.stringify(scrapedTitle[0].children[0].data), 'utf8', function(err) {
if(err) {
return console.log(err);
process.exit();
}
console.log("The data has been scraped and saved successfully! View it at './data.json'");
process.exit();
});
我正在尝试使用 node.js、cheerio 和 puppeteer 编写抓取脚本。
我目前遇到的问题是如何让 writeFile()
功能正常工作。
const puppeteer = require('puppeteer');
const $ = require('cheerio');
const fs = require('fs');
const url = 'https://www.made-up-url.com/';
puppeteer
.launch()
.then(function(browser) {
return browser.newPage();
})
.then(function(page) {
return page.goto(url).then(function() {
return page.content();
});
})
.then(function(html) {
let scrapedTitle = $('h1', html).each(function() {
return $(this).text();
});
let scrapedDesc = $('#something-else > div > p', html).each(function() {
return $(this).text();
});
// Both console logs are outputted as strings, as expected
console.log(scrapedTitle[0].children[0].data); // "Some title"
console.log(scrapedDesc[0].children[0].data); // "The description is like this."
fs.writeFile("data.json", JSON.stringify(scrapedTitle[0].children[0].data), 'utf8', function(err) {
if(err) {
return console.log(err);
}
console.log("The data has been scraped and saved successfully! View it at './data.json'");
});
process.exit();
})
.catch(function(err) {
console.log(err);
process.exit();
});
writeFile()
过去曾使用过类似 fs.writeFile("data.json", JSON.stringify(html), 'utf8', function(err) {
的东西,但现在这似乎也不起作用。当我 运行 这个脚本文件被创建时,正如预期的那样,但它总是空的,即使当两个 console.log()
显示应该有有效的字符串要写入时也是如此。没有错误。有什么想法吗?
你有下面这行,process.exit();
正在关闭文件写入操作之前的进程:
fs.writeFile("data.json", JSON.stringify(scrapedTitle[0].children[0].data), 'utf8', function (err) {
if (err) {
return console.log(err);
}
console.log("The data has been scraped and saved successfully! View it at './data.json'");
});
process.exit();
您可以将其更改为类似这样的内容,以便文件写入操作在您关闭它之前完成:
fs.writeFile("data.json", JSON.stringify(scrapedTitle[0].children[0].data), 'utf8', function(err) {
if(err) {
return console.log(err);
process.exit();
}
console.log("The data has been scraped and saved successfully! View it at './data.json'");
process.exit();
});