
本文介绍如何将 input.txt 中定义的键值对(支持纯文本格式与标准 json 格式)安全、灵活地解析为字典,并作为 `params` 传入 `requests.get()`,同时处理常见格式异常与编码问题。
在实际开发中,将请求参数外置到配置文件(如 input.txt)是提升代码可维护性与环境适配性的常用做法。但需注意:原始示例中的 input.txt 并非标准 JSON,而是类查询字符串格式(key=value,key=value),而答案中给出的 JSON 格式虽更规范,却与原始文件内容不一致。因此,一个健壮的解决方案应同时兼容两种常见格式,并具备错误处理能力。
✅ 推荐方案:优先尝试 JSON,降级解析键值对
import json
import requests
from urllib.parse import parse_qsl
from pathlib import Path
def load_params(file_path: str) -> dict:
"""安全加载参数:先尝试 JSON,失败则按 key=value 格式解析"""
p = Path(file_path)
if not p.exists():
raise FileNotFoundError(f"参数文件未找到: {file_path}")
try:
# 尝试解析为标准 JSON(推荐:input.txt 内容为合法 JSON 对象)
with open(p, "r", encoding="utf-8") as f:
return json.load(f)
except json.JSONDecodeError:
# 降级处理:按逗号分隔 + 等号分割(兼容原始 input.txt 格式)
with open(p, "r", encoding="utf-8") as f:
content = f.read().strip()
if not content:
return {}
# 支持形如 "term=...,country=...,action=..." 的单行格式
pairs = [pair.strip() for pair in content.split(",")]
params = {}
for pair in pairs:
if "=" in pair:
k, v = pair.split("=", 1) # 只分割第一个等号,避免值中含=时出错
params[k.strip()] = v.strip().strip('"\'') # 去除可能的引号
return params
# 使用示例
api_url = "https://lei-registrations.in/wp/wp-admin/admin-ajax.php"
input_file_path = "input.txt"
params = load_params(input_file_path)
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:122.0) Gecko/20100101 Firefox/122.0"
}
try:
response = requests.get(api_url, params=params, headers=headers, timeout=10)
response.raise_for_status()
data = response.json()
if data.get("success"):
from bs4 import BeautifulSoup
soup = BeautifulSoup(data["data"], "html.parser")
for r in soup.select(".searchResults_title"):
name = r.select_one(".searchResults_name")
number = r.select_one(".searchResults_number")
if name and number:
print(f"{name.text.strip():<50} {number.text.strip()}")
else:
print("API 返回失败:", data.get("message", "未知错误"))
except requests.exceptions.RequestException as e:
print("网络请求异常:", e)
except Exception as e:
print("解析或处理异常:", e)⚠️ 注意事项与最佳实践
- 文件编码:始终显式指定 encoding="utf-8",避免 Windows/Linux 换行符或中文乱码问题;
- JSON 更推荐:将 input.txt 改为 params.json 并使用标准 JSON 格式(如答案所示),语义清晰、易校验、天然支持嵌套与特殊字符;
- 安全性:切勿用 eval() 或 exec() 解析任意文本——本方案仅使用 json.load() 和安全的字符串分割;
- 空格与引号:原始格式中值可能带引号(如 "IN"),解析时应自动剥离;
- 健壮性:添加 Path.exists() 检查、timeout、raise_for_status() 和异常分类捕获,确保脚本在生产环境中稳定运行。
通过该方案,你既能无缝迁移旧格式,又能平滑升级至更规范的 JSON 配置方式,兼顾兼容性与可维护性。










