我正在使用cheerio从https://www.nba.com/players/langston/galloway/204038中获取统计信息,但我无法显示表格数据

问题描述 投票:0回答:1
[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()

    );


  });
javascript screen-scraping cheerio
1个回答
0
投票

从您的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 questionthis one有关如何加载页面并运行javascript以模拟浏览器的信息。

[第二个特别有趣,并且有一个答案,说明如何拦截和变异来自puppeteer的请求

© www.soinside.com 2019 - 2024. All rights reserved.