cheerio用href和spanparsingh2

这是我的HTMLparsing:

<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 

parsinghref和链接值就可以了。 但我有一个问题来parsing价格。 我得到许多空白和\ n的输出。 我想buy now没有buy now同样的价格。

我的示例输出的价格

  2 497,00 $ buy now 2 379,00 $ buy now 

码:

  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(); }); 

如何解决它?

编辑:

我正确的foreach循环,它的工作。 但是我还有一个问题。 我并不总是得到与数据的答案,只有3,4,5电话获得结果。 也许我的要求有问题吗?

 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); }; }); 

现在删除购买replace方法,然后删除与trim()的空白。

 links = $('a.offer-title'); $(links).each(function(i, link) { //console.log($(link).attr('href')); var price = $('span.offer-buy-now').text().replace('buy now', '').trim(); console.log(price); //items[k] = items[k] || []; //items[k] = new itemParam($(link).text(), 12, k); k++; }); 

其他解决scheme

或者你可以通过$('span.statement *').remove(); span .statement中的每个元素$('span.statement *').remove(); 那么你可以得到你的text

演示:

 links = $('a.offer-title'); $(links).each(function(i, link) { //console.log($(link).attr('href')); $('span.statement *').remove(); var price = $('span.statement').text().trim(); console.log(price); //items[k] = items[k] || []; //items[k] = new itemParam($(link).text(), 12, k); k++; }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <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> 

您可以使用以下命令从string中删除所有内容

 var price = $('span.offer-buy-now').text().replace(/[^0-9.]/g, ""); 

DEMO:

 var str = "2 497,00 $ buy now"; strreplaced = str.replace(/[^0-9.]/g, ""); alert(strreplaced);