2014-09-23 42 views
0

我試圖從madeinnyc技術地圖中獲取個人項目的名稱,地址和url,以瞭解如何使用mapbox。在這個過程中,我想抓取清單並將它們導出到我可以用於該項目的json文件中。我遇到的問題是信息沒有正確寫入json文件。當我在控制檯中記錄報廢的數據時,我收到了正確的格式和所有數據,但是來自報廢數據的書面文件不正確,只能收到一份隨機數據。我認爲目前的設置是抓取單個部分並多次覆蓋它,因爲我在控制檯中獲取了多個File Success日誌。我的writeFile方法不正確?節點寫入的文件刮不正確

這裏是登錄到控制檯console.log(metadata)的信息(正確的數據,凝聚因爲你得到的房源,其餘的想法):

{ name: 'Todayships', 
    address: '4447 Seton Ave 2', 
    url: 'http://todayships.com/' } 
{ name: 'Togather', 
    address: '45 Main St Suite 404', 
    url: 'http://www.togather.com' } 
{ name: 'Tomorrow Networks, LLC', 
    address: '1270 Avenue of the Americas 2920', 
    url: 'http://www.tomorrownetworks.com' } 
{ name: 'Topi', 
    address: '20 W 20 Street 2nd Floor', 
    url: 'http://topi.com' } 

output.json

{ 
    "name": "Berlinica Publishing LLC", 
    "address": "255 West 43rd Street Suite 1012", 
    "url": "http://www.berlinica.com" 
}s.com" 
}ackground.html" 
}drianyc.com/ersp.html" 
} 

刮。 js

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

request('http://mappedinny.com/', function (error, response, html) { 
    if (!error && response.statusCode == 200) { 
    var $ = cheerio.load(html); 

    $('li').each(function(i, element){ 

     var li = $(this) 


     var name = li.attr('data-name'); 
     var address = li.attr('data-address'); 
     var url = li.attr('data-url'); 


     var metadata = { 
      name : name, 
      address : address, 
      url : url 
     }; 
     console.log(metadata); 

     fs.writeFile('output.json', JSON.stringify(metadata, null, 4), function(err){ 
       console.log('File Success'); 
     }); 

    }); 
    } 
});   

回答

0

問題是你是異步寫入相同的f在同步循環中(你的each())。

如果你的目的是要編寫所有的結果到同一個文件,你可以嘗試:

var results = []; 

$('li').each(function(i, element){ 

    var li = $(this) 

    var name = li.attr('data-name'); 
    var address = li.attr('data-address'); 
    var url = li.attr('data-url'); 


    var metadata = { 
    name : name, 
    address : address, 
    url : url 
    }; 
    console.log(metadata); 

    results.push(metadata); 

}); 

fs.writeFile('output.json', JSON.stringify(results, null, 4), function(err){ 
    if (err) 
    console.log('File Error: ' + err); 
    else 
    console.log('File Success'); 
});