我正在尝试提取/抓取网站并将其输出合并到json数据中。但是,当我运行端点时,响应会将每个结果组合到其键中,而不是每次迭代添加一条记录。为了阐述,我得到:
{
item: "item1item2item3item4item5item6",
title: "title1title2title3title4title5title5",
price: "price1price2price3price4price5price6"
}
这是我的目标输出格式,但是:
{ item: "item1",
title: "title1",
price: "price1",
itemlink: "itemlink1" },
{ item: "item2",
title: "title2",
price: "price2",
itemlink: "itemlink2" },
{ item: "item3",
title: "title3",
price: "price3",
itemlink: "itemlink3" }, etc...
以下是以下代码段:
request(url, function(error, response, html){
if(!error){
var $ = cheerio.load(html);
var json = [];
/* Pulls out all the titles
$('.item-name').each(function() {
var title = $(this).text();
json2.push({title: title});
})
*/
function getID(str) {
return str.split('viewitem.php?iid=')[1];
}
$('.catlist').each(function(key, index) {
var title = $('.item-name').text();
var price = $('.catprice').text();
var id = getID($('h2').children().attr('href'));
var itemlink = $('h2').children().attr('href');
json.push({
id: id,
title: title,
price: price,
itemlink: itemlink
});
})
}
res.send(json)
})
我已经失去了智慧,已经花了好几个小时。知道为什么他们没有为我正确迭代?提前谢谢!
答案 0 :(得分:1)
$('.catlist').each(function(key, index) {
var title = $(this).find('.item-name').text();
var price = $(this).find('.catprice').text();
var id = getID($(this).find('h2').children().attr('href'));
var itemlink = $(this).find('h2').children().attr('href');
var temp =
{
id: id,
title: title,
price: price,
itemlink: itemlink
};
json.push(temp);
})
您需要为每个.catlist
找到子项并逐个推送到数组
答案 1 :(得分:0)
正如您在代码中看到的那样,您在每次迭代中都会为json赋值。这就是为什么它没有添加新记录的原因。 看看这段代码
$('.catlist').each(function(key, index) {
var title = $('.item-name').text();
var price = $('.catprice').text();
var id = getID($('h2').children().attr('href'));
var itemlink = $('h2').children().attr('href');
var temp =
{
id: id,
title: title,
price: price,
itemlink: itemlink
};
json.push(temp);
})
答案 2 :(得分:-1)
试试这个
json.push( {
id: id,
title: title,
price: price,
itemlink: itemlink
});