如何测试JSON文件中的链接?检测JSON数据库内失效链接
检测JSON数据库中链接有效性的实现方案
核心思路
遍历JSON数据中的每个条目,识别出所有URL字段,通过发送HTTP请求校验链接状态,筛选出返回错误状态码或无法访问的失效链接。
工具选择
用Python实现,依赖两个基础库:
json:用于加载和解析JSON数据requests:用于发送HTTP请求检测链接状态
代码实现
- 加载JSON数据
假设你的JSON数据存储在organizations.json文件中,先读取并解析:
import json import requests from time import sleep # 加载JSON数据 with open("organizations.json", "r", encoding="utf-8") as f: data = json.load(f)
- 定义链接检测函数
用HEAD请求(仅获取响应头,比GET更高效)检测链接,同时处理各类请求异常:
def check_url_validity(url): if not url.startswith(("http://", "https://")): return False, "非有效URL格式" try: # 发送HEAD请求,设置超时时间5秒 response = requests.head(url, timeout=5, allow_redirects=True) # 状态码在200-399之间视为有效链接 if 200 <= response.status_code < 400: return True, f"有效,状态码:{response.status_code}" else: return False, f"失效,状态码:{response.status_code}" except requests.exceptions.RequestException as e: return False, f"无法访问:{str(e)}"
- 遍历检测所有链接
遍历每个组织条目,检查所有可能包含URL的字段(或直接筛选值为URL的字段):
invalid_links = [] for item in data: org_name = item["Organisation"] # 遍历条目中的所有键值对,筛选URL字段 for key, value in item.items(): if isinstance(value, str) and value.startswith(("http://", "https://")): is_valid, msg = check_url_validity(value) if not is_valid: invalid_links.append({ "组织名称": org_name, "字段名": key, "链接": value, "原因": msg }) # 避免请求过于频繁被网站拦截,每次检测后暂停0.5秒 sleep(0.5) # 输出失效链接结果 print("=== 失效链接列表 ===") for link in invalid_links: print(f"组织:{link['组织名称']}") print(f"字段:{link['字段名']}") print(f"链接:{link['链接']}") print(f"原因:{link['原因']}\n")
注意事项
- 请求频率控制:添加
sleep()避免短时间内大量请求被目标网站封禁 - 请求方式兼容:部分网站可能拒绝HEAD请求,可将
requests.head()改为requests.get()并添加stream=True参数(只下载响应头) - 超时设置:必须设置超时时间,避免因个别慢链接阻塞程序
- 编码处理:读取JSON文件时指定
encoding="utf-8",避免中文或特殊字符乱码
内容的提问来源于stack exchange,提问作者djibe
相关产品推荐
相关产品推荐

