node.js从外部网站刮取html数据值

因为这是我的第一个问题,首先我想打个招呼到stackoverflow社区:)

我最近开始学习node.js。 我想从这里取消货币值: https : //www.dailyfx.com/forex-rates然后将它们保存在.txt文件中作为练习。

我find了cheerio.js框架,并试了一下。

该页面的HTML代码:

<tbody> <tr id="EURUSD" data-market-id="EURUSD" class="rates-now"> <td> <span title="EURUSD"> <a href="eur-usd">EURUSD</a> </span> </td> <td class="text-right rates-row-td"> <span data-symbol="EURUSD" data-type="bid" data-value="1.19016" data-changescale="-1"></span> </td> <td class="text-right rates-row-td"> <span data-symbol="EURUSD" data-type="ask" data-value="1.21016" data-changescale="-1"></span> </td> <td class="text-right rates-row-td"> <span id="EURUSD-spread">0.60</span> </td> <td class="text-right rates-row-td"> <span class="calendar-toggle-btn"></span> </td> </tbody> 

我的node.js代码:

 var request = require('request'); var cheerio = require('cheerio'); var fs = require('fs'); request("https://www.dailyfx.com/forex-rates", function(error, response, body) { if(error) { console.log("Error: " + error); } console.log("Status code: " + response.statusCode); var $ = cheerio.load(body); $('tr.rates-row').each(function( index ) { var title = $(this).attr('data-market-id'); console.log("Title: " + title); var value = $(this).find('td.rates-row-td > span').attr('data-value'); console.log(" Value= " + value); fs.appendFileSync('stara.txt', value + '\n'); }); }); 

输出如下所示:

 Status code: 200 Title: EURUSD Value= undefined Title: USDJPY Value= undefined Title: AUDUSD Value= undefined Title: GBPUSD Value= undefined Title: USDCAD Value= undefined 

等等。 我不知道为什么属性数据值的值是未定义的。

内容正在dynamic插入与JavaScript。 Cheerio只能读取HTML,所以它总是未定义的。

你要么需要使用像Puppeteer,jSDom,phantomjs等