خواندن CSV از طریق پروکسی با pandas و Requests
یک CSV را با انتقال Requests پیکربندیشده دریافت کنید، نتیجه 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 باشد.
برای URLهای HTTP، storage_options مربوط به read_csv بهعنوان سرآیندهای درخواست ارسال میشوند. آن رابط نگاشت proxies به سبک Requests نیست.
یک بافر نام فایل بایگانی ندارد تا استنتاج فشردهسازی را هدایت کند. وقتی دادههای دریافتشده نیاز دارند compression را مشخص کنید. همان ترتیب دریافت-اول با read_excel و بافر بایتی کار میکند و از موتور صفحهگسترده مناسب آن قالب استفاده میکند.
این نمونه کل پاسخ را در حافظه نگه میدارد. برای یک خروجی بزرگ، آن را به یک فایل محلی مدیریتشده جریان دهید و همان فایل را تجزیه کنید، با تکهتکه کردن جایی که گردش کار داده پشتیبانی میکند.