-
- 項目背景
- 項目結構
- 關鍵技術點
-
- 1. 靈活的HTTP請求處理
- 2. 自動表結構生成與字段類型推斷
- 3. 健壯的數據庫操作與錯誤處理
- 4. 配置驅動的設計理念
- 功能實現
-
- 1. 數據獲取流程
- 2. 命令行參數支持
- 2. 數據處理與字段排除
- 項目擴展與優化方向
- 結語
項目背景
在日常開發和數據分析工作中,我們經常需要從各種API接口獲取數據并進行存儲和分析。本項目提供了一個完整的解決方案,能夠靈活地調用HTTP接口(支持GET/POST請求),自動處理返回數據,并將其結構化存儲到PostgreSQL數據庫中。該工具設計簡潔高效,配置靈活,無需修改代碼即可適應不同的接口和數據結構需求。
最新更新:工具已全面升級,新增HTTP請求重試機制、數據庫連接池、事務管理、命令行參數支持、環境變量配置等功能,大幅提升了性能、穩定性和用戶體驗。
項目結構
項目采用模塊化設計,代碼結構清晰,便于維護和擴展。主要文件結構如下:
my-python/
├── README.md # 項目說明文檔
├── config.yaml # 配置文件
├── main.py # 主程序文件
├── requirements.txt # 依賴庫列表
└── app.log # 日志文件
其中,main.py
是核心代碼,包含了三個主要類:
- HTTPClient:負責發送HTTP請求和處理響應
- PostgreSQLClient:負責與PostgreSQL數據庫交互
- DataProcessor:負責數據處理和存儲邏輯
關鍵技術點
1. 靈活的HTTP請求處理
項目支持GET和POST兩種請求方式,能夠靈活配置請求參數、請求體和請求頭。通過使用Python的requests
庫,實現了健壯的HTTP客戶端功能,包括請求超時處理、錯誤捕獲和詳細日志記錄。
升級功能:
- 自動請求重試:針對臨時性失敗(如429、500-504錯誤)自動重試,提高請求成功率
- 安全日志記錄:自動屏蔽敏感信息(如密碼、API密鑰),保護數據安全
- 連接池優化:使用HTTP連接池,復用連接,提升性能
- 默認請求頭設置:設置合理的User-Agent,避免被API服務識別為爬蟲
核心實現代碼:
class HTTPClient:"""HTTP客戶端,用于發送GET/POST請求,支持請求重試、超時優化和安全日志記錄"""def __init__(self, base_url: str, timeout: int = 30, retries: int = 3, backoff_factor: float = 0.3):self.base_url = base_urlself.timeout = timeoutself.session = requests.Session()# 配置重試策略retry_strategy = Retry(total=retries,backoff_factor=backoff_factor,status_forcelist=[429, 500, 502, 503, 504], # 需要重試的HTTP狀態碼allowed_methods=["HEAD", "GET", "POST", "PUT", "DELETE", "OPTIONS", "TRACE"])adapter = HTTPAdapter(max_retries=retry_strategy)self.session.mount("http://", adapter)self.session.mount("https://", adapter)def _sanitize_log_data(self, data: Optional[Dict]) -> str:"""清理日志中的敏感信息"""if not data:return "None"sanitized = data.copy()for key in sanitized:if SENSITIVE_KEYS.search(key): # SENSITIVE_KEYS是預定義的正則表達式sanitized[key] = "***"return str