4 votes

Traitement de la requête 308 par Python Pandas

Lorsque j'ai essayé de lire les données Covid_19 de l'Angleterre dans pandas, j'ai essayé d'utiliser l'URL fournie par PHE. https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv Cependant, ce fichier a besoin d'une redirection http 308. J'ai essayé la solution élégante :

import pandas as pd
tabel = pd.read_csv('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv')

qui affiche l'erreur HTTPError: HTTP Error 308: Permanent Redirect

Cependant, l'URL fonctionne comme suit

import pandas as pd
import requests
import io
datastr = requests.get('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv',allow_redirects=True).text
data_file = io.StringIO(datastr)
table = pd.read_csv(data_file)

donne le résultat souhaité.

Je voudrais quelque chose de similaire à la première solution, est-ce un problème de pandas ou est-ce que je fais quelque chose de mal ?

1voto

Alex Tucker Points 71

En regardant le code source de Pandas, il utilise urllib.request.urlopen() et les documents suggèrent qu'il devrait suivre les redirections lorsque cela a du sens.

Cependant, le code 308 n'est pas un code de redirection défini. https://tools.ietf.org/html/rfc7231 urllib lèvera donc une exception car il ne sait pas quoi faire. La bibliothèque des requêtes est un peu plus indulgente.

La réponse indique "redirection permanente", mais au vu de l'hébergement douteux, je doute que ce soit vraiment le cas.

Je pense que l'éditeur a fait une erreur, donc je ne passerais pas beaucoup de temps avec autre chose que la solution de contournement que vous avez.

Notez que les requêtes vous permettent d'accéder au flux brut que vous pouvez passer à pd.read_csv() :

r = requests.get('https://coronavirus.data.gov.uk/downloads/csv/coronavirus-cases_latest.csv', stream=True)
pd.read_csv(r.raw)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X