如何用Python提取打印NVD API返回的深层嵌套JSON中CVE相关字段
NVD CVE接口指定字段提取代码
你可以直接使用以下修改后的代码提取所需的4个字段,requests库内置了json()方法可以直接解析响应内容,不需要手动调用json.loads:
import requests url = "https://services.nvd.nist.gov/rest/json/cve/1.0/CVE-2021-40463/" # 单CVE查询不需要额外传q参数,直接请求即可 response = requests.get(url) data = response.json() # 提取基础节点,单CVE查询下CVE_Items列表仅有1条数据 cve_item = data['result']['CVE_Items'][0] # 1. 提取cve ID cve_id = cve_item['cve']['CVE_data_meta']['ID'] # 2. 提取所有url ref(返回为列表,可按需遍历) url_ref_list = [ref['url'] for ref in cve_item['cve']['references']['reference_data']] # 3. 提取CVE描述(默认取第一条英文描述) description = cve_item['cve']['description']['description_data'][0]['value'] # 4. 提取CVSS v3严重等级,若无v3数据可替换为baseMetricV2下的severity字段 try: severity = cve_item['impact']['baseMetricV3']['cvssV3']['baseSeverity'] except KeyError: severity = cve_item['impact'].get('baseMetricV2', {}).get('severity', '未评级') # 打印结果 print("CVE ID:", cve_id) print("严重等级:", severity) print("描述:", description) print("参考链接:") for idx, ref in enumerate(url_ref_list, 1): print(f"{idx}. {ref}")
逻辑说明
- 代码做了兼容性处理,部分老旧CVE没有CVSS v3评分时,会自动尝试取CVSS v2的严重等级,两者都没有的话会返回「未评级」避免报错
- 参考链接返回的是所有官方提供的关联链接,你可以按需筛选对应类型的链接
内容的提问来源于stack exchange,提问作者Alexandra
相关产品推荐
相关产品推荐

