在一段时间的工作停机时间我决定搞乱数据抓取和JSON只是为了一点乐趣。所以我在我的网站上设置了一个虚拟页面,每隔x分钟更改一个歌曲名称和艺术家,并创建一个刮刀来拉出页面并写入JSON文件。到现在为止还挺好。我的脚本正在从页面中提取数据并将其写入JSON文件,但它的返回无效。我得到的是这个
{
"trackName": "Feels So Close",
"artistTitle": "Calvin Harris",
"playTime": "9:24"
}{
"trackName": "",
"artistTitle": "Studio B",
"playTime": "9:28"
}
我想要的更像是这个
{
"response1": {
"trackName": "Feels So Close",
"artistTitle": "Calvin Harris",
"playTime": "9:24"
},
"response2": {
"trackName": "",
"artistTitle": "Studio B",
"playTime": "9:28"
}
}
这是拉取数据的js:
request("mySite", function(error, response, body) {
if(error) {
console.log("Error: " + error);
}
console.log("Status code: " + response.statusCode);
var $ = cheerio.load(body);
$('.track').each(function(index){
var json = { trackName: "", artistTitle: "", playTime: ""};
var title = $(this).find(".track a").text().trim();
var artist = $(this).find(".artist").text().trim();
var hours = new Date().getHours();
var mins = new Date().getMinutes();
json.trackName = title;
json.artistTitle = artist;
json.playTime = hours + ":" + mins;
fs.appendFileSync('trackList.json', JSON.stringify(json, null, 4), function(error){
if(error) {
console.log('Error: ' + error);
};
});
});
});
非常感谢任何帮助,谢谢!
答案 0 :(得分:0)
您应该创建一个空对象,然后使用.each()
迭代DOM元素并创建所需的属性,即response1, response2
。
最后使用.appendFileSync()
在迭代后发送一次数据。
//Create empty object
var json = {};
//Iterate to create complete JSON object
$('.track').each(function(i){
var title = $(this).find(".track a").text().trim();
var artist = $(this).find(".artist").text().trim();
var hours = new Date().getHours();
var mins = new Date().getMinutes();
//Create property object
json['response' + i] = {
trackName : title;
artistTitle : artist;
playTime : hours + ":" + mins;
};
});
//Then send it to update
fs.appendFileSync('trackList.json', JSON.stringify(json, null, 4), function(error){
if(error) {
console.log('Error: ' + error);
};
});