我是使用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” 玩家昵称的Kyuu值没问题,但是不可能有1503,但是div的名称是正确的! 我的问题在哪里?
谢谢大家!
答案 0 :(得分:1)
嘿,欢迎来到StackOverflow!
该网站使用AJAX来获取评级,因此在加载HTML时,评级不可用,并且ranked-stats__rating-point
类尚不存在。如果使用浏览器的开发人员工具进行检查,则可以看到它为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终结点,则需要为此找到另一个API终结点。
答案 1 :(得分:0)
嗨korsosa,谢谢您的回答! 是的,名称中有多个具有rank-stats__rating-point的元素。
这是您的代码的结果:
var playerRankText = playerRank [1] .text();
TypeError:无法读取未定义的属性“文本”