Python >> Tutoriel Python >  >> Python Tag >> Requests

Le module Python Requests n'obtient pas les dernières données du serveur Web

avant votre requests.get() , essayez d'ajouter un en-tête :

import requests

url = "https://www.ncaa.com/scoreboard/basketball-men/d1/"

headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}   


response = requests.get(url, headers = headers)
html = response.text

Mon autre suggestion serait d'utiliser :

url = 'https://data.ncaa.com/casablanca/scoreboard/basketball-men/d1/2019/01/26/scoreboard.json'

et utilisez le package json pour le lire. Tout est en direct et là pour vous dans un joli format JSON

Code

import json
import requests

url = 'https://data.ncaa.com/casablanca/scoreboard/basketball-men/d1/2019/01/26/scoreboard.json'
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}    

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

jsonStr = response.text

jsonObj = json.loads(jsonStr)

J'ai vérifié et l'objet JSON renvoie les scores/données en direct. Et tout ce que vous avez à faire est de changer la date dans l'URL 2019/01/26 pour obtenir les données de fin des dates précédentes pour les jeux.

MODIFICATION - SUPPLÉMENTAIRE

Cela pourrait vous aider à extraire les données. Remarquez comment je l'ai changé à la date d'aujourd'hui pour obtenir les données actuelles. Il le place dans une belle base de données pour vous :

from pandas.io.json import json_normalize
import json
import requests

url = 'https://data.ncaa.com/casablanca/scoreboard/basketball-men/d1/2019/01/27/scoreboard.json'
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}    

# Thanks to InfectedDrake wisdom, the following 3 lines that I previously had can be replaced by a single line. See below
#response = requests.get(url, headers = headers)
#jsonStr = response.text
#jsonObj = json.loads(jsonStr)

jsonObj = requests.get(url, headers = headers).json()

result = json_normalize(jsonObj['games'])

Essayez de modifier le user-agent dans l'en-tête de la requête pour qu'il soit identique à votre user-agent Google Chrome en ajoutant ceci à vos en-têtes :

headers = {
    'User-Agent': 'Add your google chrome user-agent here'
}