我抓住了这个网站https://www.alza.sk/cpu-procesory/18842843-p1.htm这是一个带有pc组件的Czecho-Slovakia电子商店,我想获取有关CPU的数据。
我为在代码中使用斯洛伐克语而道歉,但这并不重要。
//代码
url = 'https://www.alza.sk/cpu-procesory/18842843-p1.htm';
var allCpu = new Array;
request(url, function(error, response, html) {
if(error) {
console.log(error);
} else {
var $ = cheerio.load(html);
var box = $('#boxc .box');
for(i = 0; i < box.length; i++) {
console.log(i) // Output is numbers from 0 to 23
var cpu = {
meno: '',
link: '',
socket: '',
radaCpu: '',
xJadier: '',
frekvenciaCpu: '',
maxFrekvenciaCpu: ''
}
box.eq(i).filter(function() {
cpu.meno = $(this).find('.fb a').text();
cpu.link = $(this).find('.fb a').attr('href');
request('https://www.alza.sk/' + cpu.link, function(error, response, html) {
if(error) {
console.log(error);
} else {
var $socket = cheerio.load(html);
var params = $socket('#popis .params .groupValues .row a');
params.filter(function() {
if($(this).text() == 'Socket') cpu.socket = $(this).parents('.row').find('.value').text();
if($(this).text() == 'Rad procesora') cpu.radaCpu = $(this).parents('.row').find('.value').text();
if($(this).text() == 'Počet jadier procesora') cpu.xJadier = $(this).parents('.row').find('.value').text();
if($(this).text() == 'Frekvencie procesora') cpu.frekvenciaCpu = $(this).parents('.row').find('.value').text();
if($(this).text() == 'Maximálna frekvencia (OC)') cpu.maxFrekvenciaCpu = $(this).parents('.row').find('.value').text();
});
allCpu.push(cpu);
console.log(i); // Output is 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24
if(i == box.length - 1) {
fs.writeFile('output.json', JSON.stringify(allCpu, null, 4), function(err){
console.log('File successfully written! - Check your project directory for the output.json file');
});
}
}
});
});
}
}
});
如果我从一个特定的CPU获取数据,这段代码很有用。 (box.eq(some_number))。
首先执行请求,查找名称并链接到CPU。然后使用此链接执行下一个请求,查找其他详细信息。
但是如果我使用循环,因为我想获取页面上所有CPU的数据。我总是只从最后一个CPU获取数据。 我在开始循环和结束时让增量写入控制台。在循环开始时,我有0到23之间的数字,这很好。但是在控制台的最后,我得到24次24号。我不明白为什么。
谢谢你的帮助。