Ler um CSV através de um proxy com pandas e Requests
Obtenha um CSV com um transporte Requests configurado, verifique o resultado HTTP e entregue ao pandas um buffer de bytes para análise.
Quando a rota HTTP exige controlo explícito do proxy, obtenha primeiro o CSV e deixe o pandas tratar dos 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')
O proxy trata do transporte; a lista de proxies HTTP fornece candidatos a endpoint para uma rota HTTP pública. O pandas recebe um objeto semelhante a ficheiro e aplica as suas opções habituais de delimitador, colunas, codificação e tipos de dados.
Verificar o resultado HTTP antes da análise evita tratar como tabela um corpo de erro HTTP evidente. Verifique também conteúdo inesperado: uma página de início de sessão ou de políticas pode devolver 200 e continuar a ser HTML em vez do CSV pedido.
Nos URL HTTP, os storage_options do read_csv são encaminhados como cabeçalhos do pedido. Essa interface não é um mapeamento de proxies ao estilo do Requests.
Um buffer não tem nome de ficheiro de arquivo que oriente a inferência de compressão. Especifique compression quando a carga obtida o exigir. A mesma disposição de obter primeiro funciona com read_excel e um buffer de bytes, com o motor de folha de cálculo adequado a esse formato.
Este exemplo mantém toda a resposta em memória. Para uma exportação grande, transmita-a para um ficheiro local gerido e analise esse ficheiro, com divisão em blocos onde o fluxo de dados o permitir.