Comment Importer les statistiques (tableau) du site internet NBA.com

Bonjour,

je commence sur google sheet, et je n'arrive pas à importer le tableau du site nba.com

En faisant import html, je rencontre l'erreur "le contenu importé est vide" ... Même si je change table 1 ou table 2, ...etc j'ai toujours la même erreur.

J'y arrive avec d'autres sites internet comme proballers.com mais pas sur nba.com

Pouvez-vous m'aider ?

Je n'ai pas l'autorisation de poster des liens internet mais c'est ce tableau qui m'intéresse : stats/player203497/boxscores-traditional sur le site nba.com

https://www.nba.com/stats/player203497/boxscores-traditional ... not Found !

bna.com me renvoie vers https://www.beinsports.com/

  1. peux-tu éventuellement renvoyer un fichier texte avec le code source de la page ?
  2. regarde aussi ls éventuelles restrictions d'utilisation (copyrights)

Il est probable que le site utilise javascript pour se construire, et dans ce cas la seule solution potentielle serait de récupérer et traiter les informations d'un json si celui-ci existait. C'est cela que je veux investiguer.

Merci Mikhail,

désolé j'ai oubli un / à la fin de player

donc c'est cette page : /stats/player/203497/boxscores-traditional/ sur nba.com

Pour les restrictions d'utilisation je n'ai rien trouvé, je ne sais pas.

Merci encore Mikhail, mais apparemment c'est pas possible.
Je vais changer de site internet pour importer mes données.

ok, je regarde d'ici ce soir

on peut récupérer la partie haute qui est "open"

capture d ecran 587

On ne pourra pas récupérer le détail car reconstruit via javascript après chargement de la page. C'est en effet de plus n plus courant que le site ne renvoie plus la page mise en forme, mais les données d'un côté et la structure de l'autre et c'est donc le poste final qui n'est plus seulement passif mais actif dans la reconstruction de la page. Il y a parfois des données fournies sous forme de json, mais ici il ne semble pas qu'elles contiennent le détail.

<script>
  window.nbaStatsPlayerInfo = {"PERSON_ID":203497,"FIRST_NAME":"Rudy","LAST_NAME":"Gobert","DISPLAY_FIRST_LAST":"Rudy Gobert","DISPLAY_LAST_COMMA_FIRST":"Gobert, Rudy","DISPLAY_FI_LAST":"R. Gobert","PLAYER_SLUG":"rudy-gobert","BIRTHDATE":"1992-06-26T00:00:00","SCHOOL":"Cholet","COUNTRY":"France","LAST_AFFILIATION":"Cholet\/France","HEIGHT":"7-1","WEIGHT":"258","SEASON_EXP":7,"JERSEY":"27","POSITION":"Center","ROSTERSTATUS":"Active","GAMES_PLAYED_CURRENT_SEASON_FLAG":"Y","TEAM_ID":1610612762,"TEAM_NAME":"Jazz","TEAM_ABBREVIATION":"UTA","TEAM_CODE":"jazz","TEAM_CITY":"Utah","PLAYERCODE":"rudy_gobert","FROM_YEAR":2013,"TO_YEAR":2020,"DLEAGUE_FLAG":"Y","NBA_FLAG":"Y","GAMES_PLAYED_FLAG":"Y","DRAFT_YEAR":"2013","DRAFT_ROUND":"1","DRAFT_NUMBER":"27","POSITION_INITIALS":"C","AGE":28,"AGE_DAYS":"287"};
  window.nbaStatsPlayerStats = {"PLAYER_ID":203497,"PLAYER_NAME":"Rudy Gobert","TimeFrame":"2020-21","PTS":14.699999999999999289457264239899814128875732421875,"AST":1.3000000000000000444089209850062616169452667236328125,"REB":13.4000000000000003552713678800500929355621337890625,"PIE":0.1640000000000000068833827526759705506265163421630859375};
  window.nbaStatsPlayerSeasons = [{"SEASON_ID":"12013"},{"SEASON_ID":"22013"},{"SEASON_ID":"12014"},{"SEASON_ID":"22014"},{"SEASON_ID":"12015"},{"SEASON_ID":"22015"},{"SEASON_ID":"12016"},{"SEASON_ID":"22016"},{"SEASON_ID":"42016"},{"SEASON_ID":"12017"},{"SEASON_ID":"22017"},{"SEASON_ID":"42017"},{"SEASON_ID":"12018"},{"SEASON_ID":"22018"},{"SEASON_ID":"42018"},{"SEASON_ID":"12019"},{"SEASON_ID":"22019"},{"SEASON_ID":"32019"},{"SEASON_ID":"42019"},{"SEASON_ID":"12020"},{"SEASON_ID":"22020"},{"SEASON_ID":"32020"}];
</script>

Je n'ai pas non plus trouvé de restriction de type copyright très explicite, à voir aussi, mais si on s'en tient à ces informations sans le détail il n'y a à mon sens aucune action illicite.

Tout ce qu'il est possible de récupérer

https://docs.google.com/spreadsheets/d/1gDAiY6X92lpObxNRjfNijZXqIHokchtLxJXLPdabLFE/edit?usp=sharing

pour le reste, il faut faire un copier/coller manuel !

let resultat = []; 

function infos(url) {
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=window.nbaStatsPlayerInfo = ).*/g)
  var data = JSON.parse(jsonString[0].substring(0,jsonString[0].length-1))
  getAllData(1,eval(data),'data')
  return resultat
}
function stats(url) {
  var source = UrlFetchApp.fetch(url).getContentText()
  var jsonString = source.match(/(?<=window.nbaStatsPlayerStats = ).*/g)
  var data = JSON.parse(jsonString[0].substring(0,jsonString[0].length-1))
  getAllData(1,eval(data),'data')
  return resultat
}

function getAllData(niv,obj,id) {
  const regex = new RegExp('[^0-9]+');
  for (let p in obj) {
    var newid = (regex.test(p)) ? id + '.' + p : id + '[' + p + ']';
    if (obj[p]!=null){
      if (typeof obj[p] != 'object' && typeof obj[p] != 'function'){
        resultat.push([niv, ('■').repeat(niv), trans(newid), p, obj[p]]);
      }
      if (typeof obj[p] == 'object') {
        if (obj[p].length){
          resultat.push([niv, ('■').repeat(niv), trans(newid), p + '[0-' +(obj[p].length-1)+ ']', 'tableau']);
        }else{
          resultat.push([niv, ('■').repeat(niv), trans(newid), p, 'parent']);
        }
        niv+=1;
        getAllData(niv, obj[p], newid );
        niv-=1
      }
    }
  }
}  
function trans(donnee){
  return donnee.replace(/(\[[0-9]+\])/gm,"\[_\]").replace(/data\./gm,"/").replace(/\./gm,"/");
}

Object.prototype.item=function(i){return this[i]};

Merci beaucoup beaucoup Mikhail pour ton aide, on voit que t'es un pro !

Ne perd pas plus de temps sur ce problème, je vais passer par un autre site internet qui fonctionne parfaitement avec un simple importhtml pour le même résultat.

Merci encore pour ton aide !

Je passe ce topic en résolu.

Rechercher des sujets similaires à "comment importer statistiques tableau site internet nba com"