使用 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,却仍是 HTML 而不是所请求的 CSV。
对于 HTTP URL,read_csv 的 storage_options 会作为请求头传递。该接口并不是 Requests 风格的 proxies 映射。
缓冲区没有归档文件名可用来推断压缩格式。当获取的载荷需要时,请指定 compression。同样的先获取再解析的做法也适用于 read_excel 和字节缓冲区,只需使用与该格式相匹配的电子表格引擎。
此示例把整个响应保留在内存中。对于大型导出,将其流式写入受管理的本地文件,再解析该文件;在数据流程支持时进行分块处理。