我开始学习node.js,并试图抓取一些网站数据。 这是我的代码。
request(url, function (error, response, body) {
if (!error) {
var $ = cheerio.load(body,{
ignoreWhitespace: false
});
var produsGasit =[];
$('body').each(function(i, elem){
produsGasit[i]={};
//produsGasit[i]['name'] = $(elem).find('.fn').text();
produsGasit[i]['produs'] = $(elem).find('.product').text();
produsGasit[i]['reducere'] = $(elem).find('.product-badge').text();
produsGasit[i]['linkProdus'] = $(elem).find('.product_link').attr('href');
//imagineProdus = $(elem).find('.ProductImage').text();
produsGasit[i]['descriereProdus'] = $(elem).find('.ProductDetails').text();
produsGasit[i]['pretProdus'] = $(elem).find('.price').text();
//console.log(name+"±"+produs+"±"+reducere+"+"+linkProdus+"+"+descriereProdus+"+"+pretProdus);
console.log(produsGasit[i]);
fs.appendFile('produse.json', JSON.stringify(produsGasit,null,8), function (err) {
if (err) throw err;
console.log('Saved!');
});
}
)}
})
我想写下我进入对象的信息。 我的问题是,当我运行代码时,它会根据我用来识别数据的类对所有数据进行分组。例如,产品的所有价格都在一个关键字:值字段中。 我想要做的是让我在页面上找到每个产品的标题,价格,并在json文件中创建与所有数据相对应的数据的单独对象。
答案 0 :(得分:0)
Cheerios有一个map API method用于映射匹配的元素。 它接受一个回调函数,它接收索引和匹配的元素并返回结果。
此回调可用于将匹配的元素转换为产品对象(参见 Product
函数。)
必须调用get API method来检索映射值。
通过选择产品的最近包含元素,您可以一次匹配产品列表。 例如 Noutati 部分中的产品位于无序列表中,其中每个列表项都有 .new_product 类。
const Product = (el, $) => {
return {
name: $(el).find('.fn').text(),
produs: $(el).find('.product').text(),
reducere: $(el).find('.product-badge').text(),
linkProdus: $(el).find('.product_link').attr('href'),
imagineProdus: $(el).find('.ProductImage img').attr('src'),
descriereProdus: $(el).find('.ProductDetails').text(),
pretProdus: $(el).find('.price').text()
};
};
request(url, (err, response, body) => {
if (!err) {
const $ = cheerio.load(body, {ignoreWhitespace: false});
const newProdusGasit = $('.new_product')
.map((i, el) => ProductObject(el, $))
.get();
fs.appendFile(
'produse.json',
JSON.stringify(newProdusGasit,null, 4),
function (err) {
if (err) throw err;
console.log('Saved!');
}
);
}
})