You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests.get从NIST NVD拉取数据时,如何追加JSON文件而非覆盖?

问题解决:NVD数据抓取后追加到JSON文件而非覆盖

原代码的核心问题

  1. 循环中仅将response对象存入列表,但最终只处理了最后一次请求的响应,完全没用到之前存的jsonAppend列表,相当于只抓了最后一页数据
  2. 写入文件用"w"模式直接覆盖,且未读取已有文件的内容,根本没实现"追加"逻辑
  3. JSON是结构化数据,不能像文本那样直接追加内容,必须先合并新旧数据再整体写入

修改后的代码实现

import json
import requests
import gzip

# 替换成你的实际文件路径
jsonPathMedium = "medium_cves.json"
jsonPathMediumCompressed = "medium_cves.json.gz"

base_url = "https://services.nvd.nist.gov/rest/json/cves/2.0?cvssV3Severity=MEDIUM&resultsPerPage=2000&"
headers = {"Accept": "application/json", "Authorization": "Bearer 123456"}
ids = ['startIndex=0', 'startIndex=2000']

# 初始化总数据列表,先尝试读取已有文件的内容
all_vulnerabilities = []
try:
    with open(jsonPathMedium, "r") as f:
        existing_data = json.load(f)
        # 取出已有的漏洞数据(假设原有结构和NVD返回一致,核心在vulnerabilities字段)
        if "vulnerabilities" in existing_data:
            all_vulnerabilities.extend(existing_data["vulnerabilities"])
except FileNotFoundError:
    # 文件不存在则直接开始新抓取
    pass

# 遍历分页抓取数据并合并
for idx_param in ids:
    response = requests.get(base_url + idx_param, headers=headers)
    response.raise_for_status()  # 捕获请求错误
    data = response.json()
    # 将当前页的漏洞数据追加到总列表
    all_vulnerabilities.extend(data.get("vulnerabilities", []))
    print(f"已抓取分页 {idx_param} 的数据")

# 构造完整的JSON结构(和NVD返回格式一致)
final_data = {
    "resultsPerPage": 2000,
    "startIndex": 0,
    "totalResults": len(all_vulnerabilities),
    "vulnerabilities": all_vulnerabilities
}

# 写入合并后的JSON文件
with open(jsonPathMedium, "w") as jsonFileMedium:
    json.dump(final_data, jsonFileMedium, indent=4)
print("已写入合并后的中危漏洞JSON文件")

# 压缩文件
with open(jsonPathMedium, 'rb') as mediumIn, gzip.open(jsonPathMediumCompressed, 'wb') as mediumOut:
    mediumOut.writelines(mediumIn)
print("已压缩中危漏洞JSON文件")

关键修改说明

  • 合并新旧数据:先尝试读取已有文件,将原有漏洞数据导入总列表,再把新抓取的分页数据追加进去
  • 正确处理JSON结构:保持和NVD API返回的结构一致,确保后续使用数据时格式统一
  • 错误处理:加入response.raise_for_status()捕获请求失败的情况,避免无效数据写入
  • 优化文件操作:用嵌套with语句处理压缩,自动管理文件关闭,避免资源泄漏

内容的提问来源于stack exchange,提问作者tortillas21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:06:38