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();
});