[the information i want to access][1]
[1]: https://i.stack.imgur.com/4SpCU.png
无论我做什么,我都无法访问统计信息表。我怀疑这与存在多个表有关,但我不确定。在此处输入代码
var cheerio = require("cheerio");
var axios = require("axios");
axios
.get("https://www.nba.com/players/langston/galloway/204038")
.then(function (response) {
var $ = cheerio.load(response.data);
console.log(
$("player-detail").find("section.nba-player-stats-traditional").find("td:nth-child(3)").text()
);
});
从您的get请求返回的实际html不包含数据或表。当您的浏览器加载页面时,将执行一个脚本,该脚本从使用api调用中提取数据并创建页面上的大多数元素。
如果您打开Chrome开发者工具(CTRL + SHIFT + J)并切换到“网络”标签并重新加载页面,则可以看到所有请求均已发生。第一个是在axios GET请求中下载的html。如果您单击该按钮,则与检查页面时所看到的相比,您可以看到HTML非常基础。
如果单击“ XHR”,将显示为获取数据而进行的大多数API调用。 “ 204038_profile.json”有一个有趣的地方。如果单击该按钮,则可以看到我想以JSON格式显示的信息,而无需解析html表,该信息更易于使用。您可以右键单击“ 204038_profile.json”并复制完整的网址:
https://data.nba.net/prod/v1/2019/players/204038_profile.json
注意:大多数网站都不会像这样使用您的数据,您可能要检查其政策。它们可能使随时访问数据或更改URL变得更加困难。
您可能想查看this question或this one有关如何加载页面并运行javascript以模拟浏览器的信息。
[第二个特别有趣,并且有一个答案,说明如何拦截和变异来自puppeteer的请求