2014-09-03 12 views
5

Prima di creare una soluzione completa per il mio problema utilizzando Scrapy sto postando una versione semplicistica di ciò che voglio fare:XHR richiesta URL dice non esiste quando si tenta di analizzare il suo contenuto

import requests 

url = 'http://www.whoscored.com/stageplayerstatfeed/?field=1&isAscending=false&orderBy=Rating&playerId=-1&stageId=9155&teamId=32"' 

params = {'d': date.strftime('%Y%m'), 'isAggregate': 'false'} 
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36'} 

response = requests.get(url, params=params, headers=headers) 

fixtures = response.body 
#fixtures = literal_eval(response.content) 
print fixtures 

Questo codice è dicendo che l'URL di cui sopra non esiste. L'URL si riferisce a una richiesta XHR che viene presentata quando si alterna dal 'complesso' alla scheda 'Home' della tabella principale in questa pagina:

http://www.whoscored.com/Teams/32/ 

Se si attiva la registrazione XHR all'interno della console di Google Developer Strumenti è possibile visualizzare sia la richiesta XHR che la risposta inviata dal server sotto forma di dizionario (che è il formato previsto).

Qualcuno può dirmi perché il codice sopra riportato non restituisce i dati che mi sarei aspettato di vedere?

Grazie

risposta

7

Hai diversi problemi:

  • L'URL deve essere http://www.whoscored.com/stageplayerstatfeed
  • sbagliate GET parametri
  • mancanti importanti intestazioni richieste
  • è necessario response.json(), non response.body

La versione fissa:

import requests 

url = 'http://www.whoscored.com/stageplayerstatfeed' 
params = { 
    'field': '1', 
    'isAscending': 'false', 
    'orderBy': 'Rating', 
    'playerId': '-1', 
    'stageId': '9155', 
    'teamId': '32' 
} 
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36', 
      'X-Requested-With': 'XMLHttpRequest', 
      'Host': 'www.whoscored.com', 
      'Referer': 'http://www.whoscored.com/Teams/32/'} 

response = requests.get(url, params=params, headers=headers) 

fixtures = response.json() 
print fixtures 

Stampe:

[ 
    { 
     u'AccurateCrosses': 0, 
     u'AccurateLongBalls': 10, 
     u'AccuratePasses': 89, 
     u'AccurateThroughBalls': 0, 
     u'AerialLost': 2, 
     u'AerialWon': 4, 
     ... 
    }, 
    ... 
] 
+0

grazie per questo, che ha lavorato come volevo che. non mi ero reso conto che dovevo specificare le parti dell'URL dopo l'indirizzo principale come parametri specifici piuttosto che come parte dell'URL come vengono visualizzati nella console. inoltre, potresti spiegare quali sono le tre righe dopo "User-Agent" all'interno delle "intestazioni"? grazie ... – gdogg371

+1

@ user3045351 sicuro, quelle sono le intestazioni che sono state inviate dal browser durante l'ispezione. Puoi provare a rimuoverli uno per uno e vedere se il codice si rompe: penso che almeno alcuni di essi non siano realmente necessari. Grazie. – alecxe

Problemi correlati