Odczyt CSV przez proxy z pandas i Requests
Pobierz CSV skonfigurowanym transportem Requests, sprawdź wynik HTTP i przekaż pandas bufor bajtów do parsowania.
Gdy trasa HTTP wymaga jawnej kontroli proxy, najpierw pobierz CSV i pozwól pandas obsłużyć otrzymane bajty:
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')
Proxy zajmuje się transportem; lista proxy HTTP dostarcza kandydatów punktów końcowych dla publicznej trasy HTTP. pandas otrzymuje obiekt podobny do pliku i stosuje swoje zwykłe opcje separatora, kolumn, kodowania i typów danych.
Sprawdzenie wyniku HTTP przed parsowaniem zapobiega potraktowaniu oczywistego ciała błędu HTTP jako tabeli. Sprawdź też nieoczekiwaną treść: strona logowania lub polityki może zwrócić 200 i nadal być HTML zamiast żądanego CSV.
Dla adresów URL HTTP opcje storage_options read_csv są przekazywane jako nagłówki żądania. Ten interfejs nie jest mapowaniem proxies w stylu Requests.
Bufor nie ma nazwy pliku archiwum, która kierowałaby wnioskowaniem o kompresji. Określ compression, gdy pobrany ładunek tego wymaga. Ten sam układ najpierw-pobierz działa z read_excel i buforem bajtów, z silnikiem arkusza odpowiednim dla tego formatu.
Ten przykład trzyma całą odpowiedź w pamięci. W przypadku dużego eksportu przesyłaj go strumieniowo do zarządzanego pliku lokalnego i parsuj ten plik, dzieląc na części tam, gdzie przepływ danych to obsługuje.