Leer un CSV a través de un proxy con pandas y Requests
Obtenga un CSV con un transporte de Requests configurado, compruebe su resultado HTTP y entregue a pandas un búfer de bytes para analizarlo.
Cuando la ruta HTTP necesita control explícito del proxy, obtenga primero el CSV y deje que pandas se encargue de los bytes resultantes:
from io import BytesIO
import pandas as pd
import requests
route = {
'http': 'http://proxy.example:8080',
'https': 'http://proxy.example:8080',
}
with requests.get(
'https://data.example/report.csv',
proxies=route,
timeout=(5, 30),
) as response:
response.raise_for_status()
frame = pd.read_csv(BytesIO(response.content), encoding='utf-8')
El proxy se encarga del transporte; la lista de proxies HTTP aporta candidatos de punto de conexión para una ruta HTTP pública. pandas recibe un objeto similar a un archivo y aplica sus opciones habituales de delimitador, columnas, codificación y tipos de datos.
Comprobar el resultado HTTP antes de analizar evita tratar como tabla un cuerpo de error HTTP evidente. Revise también el contenido inesperado: una página de inicio de sesión o de políticas puede devolver 200 y seguir siendo HTML en lugar del CSV solicitado.
En las URL HTTP, los storage_options de read_csv se envían como cabeceras de la solicitud. Esa interfaz no es un mapeo de proxies al estilo de Requests.
Un búfer no tiene nombre de archivo de archivo que guíe la inferencia de compresión. Especifique compression cuando la carga obtenida lo requiera. La misma disposición de obtener primero funciona con read_excel y un búfer de bytes, con el motor de hoja de cálculo adecuado para ese formato.
Este ejemplo mantiene toda la respuesta en memoria. Para una exportación grande, transmítala a un archivo local gestionado y analice ese archivo, con fragmentación cuando el flujo de datos lo permita.