Das ist mein html zu analysieren:cheerio Parse h2 mit einem href und Spanne
<h2 class="offer-header">
<a class="offer-title" href="http://address.com/id/2">Item name</a>
</h2>
<div class="offer-price">
<span class="offer-buy-now buy-now">
<span class="statement">
1 999,00 $
<span class="label">buy now</span>
</span>
</span>
</div>
// many the same elements
Parse href und Link Wert, es ist ok. Aber ich habe ein Problem, den Preis zu analysieren. Ich bekomme Ausgabe mit vielen Leerzeichen und \ n. Ich möchte den gleichen Preis ohne buy now
zeigen.
Meine Beispielausgabe für Preise
2 497,00 $
buy now
2 379,00 $
buy now
Code:
request(task.url, function(err, resp, body){
if(body) {
$ = cheerio.load(body);
links = $('a.offer-title');
$(links).each(function (i, link) {
//console.log($(link).attr('href'));
var price = $('span.offer-buy-now').text();
console.log(price);
//items[k] = items[k] || [];
//items[k] = new itemParam($(link).text(), 12, k);
k++;
});
}
callback();
});
Wie es zu beheben?
EDIT:
ich richtig foreach-Schleife und es ist funktioniert. Aber ich habe ein anderes Problem. Ich bekomme nicht immer die Antwort mit den Daten, nur für 3,4,5 Anruf bekommt Ergebnisse. Vielleicht stimmt etwas mit meiner Anfrage nicht?
router.route('/send')
.post(function(req, res){
var url = req.body.url;
var items = [];
var k=0;
var q = async.queue(function(task, callback){
console.log(task.url);
if(task.url.length>=1) {
if (isURL(task.url)) {
console.log('OK');
request(task.url, function(err, resp, body){
if(body) {
$ = cheerio.load(body);
links = $('div.offer-info');
$(links).each(function (i, link) {
console.log($(link).find('a.offer-title').attr('href'));
var price = $(link).find('span.offer-buy-now').text().replace(/[^0-9.]/g, "");
console.log(price);
items[k] = items[k] || [];
items[k] = new itemParam($(link).find('a.offer-title').text(),
price,$(link).find('a.offer-title').attr('href'), k);
k++;
});
}
callback();
});
} else {
errorHandling(res, 401,"Invalid url");
}
}else{
errorHandling(res, 401,"Invalid url");
}
}
);
q.push({url: url+'&p=1'});
q.drain = function(errr, p) {
console.log('all items have been processed' + items.length);
for (var i=0; i<items.length; i++) {
console.log(items[i].name + ' | ' + items[i].id + ' | ' + items[i].price);
}
res.sendStatus(200);
};
});
Ok, aber ich sollte auf 'statement' von' $ (link) 'verweisen, sonst wird mir alles eine Zeile anzeigen. – lukassz
versuchen Sie die erste Lösung, die es für Sie arbeiten wird. – Gintoki
Ich versuche das, aber es funktioniert nicht – lukassz