2017-10-20 28 views
0

Je suis très novice en matière de scrapbooking et j'ai du mal à récupérer certaines données sur les joueurs de la NBA sur nba.com. J'ai d'abord essayé de gratter la page en utilisant BS4, mais a rencontré un problème qui, après quelques recherches, je crois est dû à "XHR" des articles que j'ai lus. J'ai été capable de trouver une adresse web pour les données au format json, mais mon programme python semble s'enliser, et ne charge jamais les données. Encore une fois, je suis très nouveau sur le web scraping, mais je pensais que je verrais si j'étais loin de la piste ici ... Des suggestions? Merci! (Code ci-dessous)Grattage de la page web json

import requests 
import json 

url = "http://stats.nba.com/stats/leaguedashplayerstats?College=&Conference=&Country=&DateFrom=&DateTo=&Division=&DraftPick=&DraftYear=&GameScope=&GameSegment=&Height=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2017-18&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight=" 

resp = requests.get(url=url) 
data = json.loads(resp.text) 
print(data) 
+0

pourquoi ne pas consulter une bibliothèque pour obtenir de l'aide? https://github.com/seemethere/nba_py ou au moins voir comment ils l'ont fait? – corn3lius

+0

N'a pas encore trouvé .. merci va regarder! – johankent30

Répondre

1

Donnez ce un coup de feu. Il produira toutes les catégories de cette page selon le titre que j'ai défini. En fait, vous n'avez pas reçu de réponse en premier lieu avec votre essai initial parce que la page Web attendait un User-Agent dans votre demande pour s'assurer que la demande ne provient pas d'un bot plutôt que d'un vrai navigateur. Cependant, j'ai truqué et trouvé la réponse.

import requests 

url = "http://stats.nba.com/stats/leaguedashplayerstats?College=&Conference=&Country=&DateFrom=&DateTo=&Division=&DraftPick=&DraftYear=&GameScope=&GameSegment=&Height=&LastNGames=0&LeagueID=00&Location=&MeasureType=Base&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PaceAdjust=N&PerMode=PerGame&Period=0&PlayerExperience=&PlayerPosition=&PlusMinus=N&Rank=N&Season=2017-18&SeasonSegment=&SeasonType=Regular+Season&ShotClockRange=&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight=" 
resp = requests.get(url,headers={'User-Agent':'Mozilla/5.0'}) 
data = resp.json() 

storage = data['resultSets'] 
for elem in storage: 
    all_list = elem['rowSet'] 

    for item in all_list: 
     Player_Id = item[0] 
     Player_name = item[1] 
     Team_Id = item[2] 
     Team_abbr = item[3] 
     print("Player_Id: {} Player_name: {} Team_Id: {} Team_abbr: {}".format(
      Player_Id,Player_name,Team_Id,Team_abbr)) 
+0

J'ai essayé votre méthode avec cette URL: "http: // www .enciclovida.mx/explora-por-région/especies-por-grupo? utf8 = \ xe2 \ x9c \ x93 & grupo_id = Plantas & region_id = & parent_id = & pagina = & nombre = " et je reçois toujours un 500, même en utilisant les en-têtes, tout des idées sur comment puis-je l'adapter? –

+0

Je n'ai pas pu générer d'erreur. Ça fonctionne encore. – SIM

+0

mmm J'ai essayé de définir un region_id et je reçois des résultats, mais comme ceux-ci viennent dans les pages (pagina =), je reçois seulement les 10 premiers, ils devraient être> 500 pages; J'ai vu l'exemple du basketball a toutes les données dans la même page. Des indices? –

0

viens juste de réaliser que c'est parce que les en-têtes de l'agent utilisateur sont différents ... Une fois que ceux-ci sont ajoutés cela fonctionne

+1

vous pouvez également utiliser directement le r.json() comme indiqué [ici] (http://docs.python-requests.org/fr/master/) – Thecave3