使用 node.js 和 cheerio 抓取 OP.GG 网站时出现问题

Problem with scraping OP.GG website with node.js and cheerio

我是 node.js 和 cheerio 的初学者,如果有一点帮助会很棒 :D

我尝试抓取 pubg.op.gg 网站,以便在控制台中显示两个简单的元素。 这是我的代码:

var url = "https://pubg.op.gg/user/K1uu"
var request = require('request');
var cheerio = require('cheerio');
var cheerioAdv = require('cheerio-advanced-selectors');

request(url, function(err, resp, body) {
    var $ = cheerio.load(body);
    var playerName = $('.player-summary__name');
    var playerNameText = playerName.text();
    console.log(playerNameText);

    var playerRank = $('.ranked-stats__rating-point');
    var playerRankText = playerRank.text();
    console.log(playerRankText);   
})

我试着做这样的事情:"Kyuu - 1503" playernickname 的 Kyuu 值没有问题,但不可能有 1503,但是 div 的名称是正确的! 我的问题在哪里?

谢谢你们!!

您好,欢迎来到 Whosebug!

该网站使用 AJAX 获取评分,因此当加载 HTML 时,评分不可用,并且 ranked-stats__rating-point class 尚不存在。如果你用浏览器的开发者工具检查它,你可以看到它为 3 个不同的评分点请求了 3 个额外的 URL(唯一的区别是 queue_size URL 参数)。

https://pubg.op.gg/api/users/59fdce2bdf1b210001a9324d/ranked-stats?season=pc-2018-01&queue_size=1&mode=tpp
https://pubg.op.gg/api/users/59fdce2bdf1b210001a9324d/ranked-stats?season=pc-2018-01&queue_size=2&mode=tpp
https://pubg.op.gg/api/users/59fdce2bdf1b210001a9324d/ranked-stats?season=pc-2018-01&queue_size=4&mode=tpp

您应该可以像这样请求第一个评分:

var url = "https://pubg.op.gg/api/users/59fdce2bdf1b210001a9324d/ranked-stats?season=pc-2018-01&queue_size=1&mode=tpp";
var request = require('request');

request(url, function(err, resp, body) {
  var jsonData = JSON.parse(body);
  var score = jsonData['stats']['rating'];
  console.log(score);  // outputs "1520"
} );

但是这些端点无法提供用户名,因此如果您想为任意用户名获取这些端点,则需要为此找到另一个 API 端点。

您好 korsosa,感谢您的回答! 是的,有多个名称为 ranked-stats__rating-point 的元素。

有你的代码的结果:

var playerRankText = playerRank[1].text();
类型错误:无法读取未定义的 属性 'text'