-
- 项目背景
- 项目结构
- 关键技术点
-
- 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