Я просмотрел этот сайт https://www.alza.sk/cpu-procesory/18842843-p1.htm Это большой интернет-магазин Чехословакии с компьютерными компонентами, я хочу получить данные о процессоре.
Я прошу прощения за использование словацких слов в коде, но это не имеет значения.
// CODE
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');
});
}
}
});
});
}
}
});
Этот код отлично работает, если я получаю данные с одного конкретного процессора.(box.eq (some_number)).
Сначала он выполняет запрос, находит имя и ссылку на процессор.Далее он с помощью этой ссылки выполняет следующий запрос, который находит другую подробную информацию.
Но если я использую цикл, потому что я хочу получить данные всех процессоров на странице.Я всегда получаю данные только с последнего процессора.Я позволил инкременту записи в консоль при запуске моего цикла и в конце.В начале цикла у меня были цифры от 0 до 23, это хорошо.Но в конце в консоли я получил число 24 раза. Я не понимаю, почему.
Спасибо за помощь.