网络抓取 Cheerio 中的 HTML table

Web scraping an HTML table in Cheerio

我的网页抓取项目有问题。这是我需要抓取的页面示例:

<table style="position...">
   <thead>..</thead>
     <tbody id="leaderboard_body">
       <tr bgcolor="#155555">..</tr>
       <tr bgcolor="#155555">..</tr>
       <tr bgcolor="#155555">..</tr>
                ...
     </tbody>
</table>

有关更多详细信息,请访问以下页面:World Leaderboards

我想访问 tr 标签中的信息,但无法实现。我找不到像这样简单代码的tbody标签,我也不知道为什么:

var cheerio = require("cheerio");
var url = "http://www.dota2.com/leaderboards/?l=french#europe";
var http = require("http");

// Utility function that downloads a URL and invokes
// callback with the data.
function download(url, callback) {
  http.get(url, function(res) {
    var data = "";
    res.on('data', function (chunk) {
      data += chunk;
    });
    res.on("end", function() {
      callback(data);
    });
  }).on("error", function() {
    callback(null);
  });
}

download(url, function(data) {
  if (data) {

var $ = cheerio.load(data);
var content = $('tbody').text();
console.log(content);
    }
  else
    console.log(err);
  
});

那是因为table不存在于HTML中,它是在页面加载后用javascript插入的,无法通过传统方式抓取。

始终查看源代码,而不仅仅是控制台中的实时视图。

只做最少的研究表明 table 是从 JSON 构建的,它是通过

的请求获得的

http://www.dota2.com/webapi/ILeaderboard/GetDivisionLeaderboard/v0001?division=europe

你已经拥有了所有你需要的预格式化和准备好的数据,而无需抓取 HTML