config_loader.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import yaml
  2. import os
  3. from urllib.parse import urljoin
  4. from utils.project_paths import config_spiders_path
  5. class ConfigLoader:
  6. def __init__(self, config_path=config_spiders_path):
  7. if not os.path.exists(config_path):
  8. raise FileNotFoundError(f"[配置错误] 找不到配置文件: {config_path}")
  9. self.config_path = config_path
  10. self.config = self._load_yaml()
  11. def _load_yaml(self):
  12. with open(self.config_path, "r", encoding="utf-8") as f:
  13. return yaml.safe_load(f)
  14. def get_platform_config(self, platform: str) -> dict:
  15. """获取平台配置,并拼接完整 URL"""
  16. if platform not in self.config:
  17. raise ValueError(f"[配置错误] 未找到平台配置: {platform}")
  18. platform_config = self.config.get(platform, {})
  19. base_config = self.config.get("default", {})
  20. # 合并配置:平台配置覆盖默认配置
  21. merged = {**base_config, **platform_config}
  22. # 自动拼接完整 url(优先用完整 url)
  23. if "url" not in merged and "base_url" in merged and "path" in merged:
  24. merged["url"] = urljoin(merged["base_url"], merged["path"])
  25. return merged
  26. if __name__ == '__main__':
  27. config = ConfigLoader().get_platform_config("benshanzhufu")
  28. print(config)