【问题标题】:How do I write to files using cheerio and request in node?如何使用cheerio 写入文件并在节点中请求?
【发布时间】:2015-03-10 05:22:40
【问题描述】:

我在node中使用cheerio和request来写一个简单的scraper,很像这个链接:

https://www.digitalocean.com/community/tutorials/how-to-use-node-js-request-and-cheerio-to-set-up-simple-web-scraping

我的文件略有不同,以这种形式抓取的 URL:http://foo.com/2014/12/http://foo.com/2014/11/ 等。这里是:

var fs = require('fs');
var request = require('request');
var cheerio = require('cheerio');


var year = ["2014", "2013", "2012", "2011", "2010"];
var yearLength = year.length;

var month = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12'];
var monthLength = month.length;

var postDate = '';
var singlePost = {};

var posts = {
    colors: {
        tastes: []
    }
};

var j, k = 0;

for (j=0; j < yearLength; j++) {
    for (var k=0; k < monthLength; k++) {    

    var fooUrl = 'http://foo.com/' + year[j] + '/' + month[k];         
    var localUrl = './' + year[j] + '/' + month[k] + '/texts.json';

    console.log(JSON.stringify(localUrl));

    request(fooUrl, function (error, response, html) {
        if (!error && response.statusCode == 200) {
            var $ = cheerio.load(html);

            $('ul.slashdot').each(function(i, element){
               var postDate = $(this).children().first().text();            
               $(this).children().first().siblings().each(function(i, element){

               var post = $(this).children();

               var postUrl = post.eq(3).attr('href');



            var singlePost = {

                day: postDate,
                url: postUrl,
                year: year[j],
                month: month[k]

            };

            posts.colors.tastes.push(singlePost);

            });


        });

        fs.writeFile(localUrl, JSON.stringify(posts, null, 2));
        }
    });
    }
}

现在,当我遍历两个循环时,我无法写入文件。使用 writeFileSync 也无济于事。

我做错了什么?当我登录到控制台时,它显示为漂亮的 JSON,但实际上并没有写入文件。

此外,year[j]month[k] 未定义。如何让他们看到这两个变量的范围?

【问题讨论】:

  • 给函数添加回调,可能会返回错误。在您开始向其写入数据之前,文件 localUrl 是否存在?

标签: javascript json node.js cheerio


【解决方案1】:

您需要确保路径上的所有目录都存在,如果不存在则创建它们。

您可能想看看 node-fs-extra 模块。 createFile(file, callback) 应该有帮助:https://www.npmjs.com/package/node-fs-extra

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2018-06-18
    • 1970-01-01
    • 2017-06-10
    • 2017-10-16
    相关资源
    最近更新 更多