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.

Powiązane artykuły