pandas と Requests でプロキシ経由の CSV を読む
設定済みの Requests トランスポートで CSV を取得し、HTTP の結果を確認して、pandas に解析用のバイトバッファを渡します。
HTTP の経路に明示的なプロキシ制御が必要な場合は、まず CSV を取得し、得られたバイトを pandas に処理させます。
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')
プロキシが転送を担い、HTTP プロキシ一覧が公開 HTTP 経路向けのエンドポイント候補を提供します。pandas はファイルのようなオブジェクトを受け取り、通常どおりの区切り文字、列、エンコーディング、データ型のオプションを適用します。
解析の前に HTTP の結果を確認すれば、明らかな HTTP エラーの本文を表として扱うことを避けられます。想定外の内容も確認してください。ログインやポリシーのページが 200 を返しつつ、要求した CSV ではなく HTML である場合があります。
HTTP URL では、read_csv の storage_options はリクエストヘッダーとして転送されます。このインターフェースは Requests 形式の proxies マッピングではありません。
バッファにはアーカイブのファイル名がないため、圧縮の推定に使えません。取得したペイロードが必要とする場合は compression を指定してください。同じ「先に取得する」構成は read_excel とバイトバッファでも機能し、その形式に適した表計算エンジンを使います。
この例はレスポンス全体をメモリに保持します。大きなエクスポートでは、管理されたローカルファイルにストリームし、そのファイルを解析してください。データの流れが許す場合は分割して処理します。