gpt4 book ai didi

python - NVD - 使用 Python 将 JSON 转换为 CSV

转载 作者:行者123 更新时间:2023-12-01 02:26:51 27 4
gpt4 key购买 nike

我正在尝试下载 NVD CVE。这是我的Python代码:

import requests
import re

r = requests.get('https://nvd.nist.gov/vuln/data-feeds#JSON_FEED')
for filename in re.findall("nvdcve-1.0-[0-9]*\.json\.zip",r.text):
print(filename)
r_file = requests.get("https://static.nvd.nist.gov/feeds/json/cve/1.0/" + filename, stream=True)
with open("nvd/" + filename, 'wb') as f:
for chunk in r_file:
f.write(chunk)

现在我想用这种格式将所有 JSON 文件写入 csv 文件:

Name, Value, Description, ..., ...  
Name, Value, Description, ..., ...

有人可以帮助我吗?

最佳答案

以下内容应该可以帮助您入门,为您提供两列:ID、VendorNameDescriptionVendorValues`:

import requests
import re
import zipfile
import io
import json
import csv

with open("nvdcve-1.0-2017.json") as f_json:
r = requests.get('https://nvd.nist.gov/vuln/data-feeds#JSON_FEED')

with open('output.csv', 'w', newline='') as f_output:
csv_output = csv.writer(f_output)
csv_output.writerow(['ID', 'VendorName', 'Description', 'VersionValues'])

for filename in re.findall("nvdcve-1.0-[0-9]*\.json\.zip", r.text):
print("Downloading {}".format(filename))
r_zip_file = requests.get("https://static.nvd.nist.gov/feeds/json/cve/1.0/" + filename, stream=True)
zip_file_bytes = io.BytesIO()

for chunk in r_zip_file:
zip_file_bytes.write(chunk)

zip_file = zipfile.ZipFile(zip_file_bytes)

for json_filename in zip_file.namelist():
print("Extracting {}".format(json_filename))
json_raw = zip_file.read(json_filename).decode('utf-8')
json_data = json.loads(json_raw)

for entry in json_data['CVE_Items']:
try:
vendor_name = entry['cve']['affects']['vendor']['vendor_data'][0]['vendor_name']
except IndexError:
vendor_name = "unknown"

try:
url = entry['cve']['references']['reference_data'][0]['url']
except IndexError:
url = ''

try:
vv = []

for pd in entry['cve']['affects']['vendor']['vendor_data'][0]['product']['product_data']:
for vd in pd['version']['version_data']:
vv.append(vd['version_value'])

version_values = '/'.join(vv)
except IndexError:
version_values = ''

csv_output.writerow([
entry['cve']['CVE_data_meta']['ID'],
url,
vendor_name,
entry['cve']['description']['description_data'][0]['value'],
version_values])

这会将 zip 文件下载到内存中。然后,它一次将所有文件提取到内存中,并使用 json.loads() 将 json 转换为 Python 数据结构。然后,对于 CVE_Items 中的每个条目,它会提取几个字段并将它们写入 CSV 文件。

由于 JSON 数据是高度结构化的,因此您需要考虑如何表示 CSV 文件中的所有字段。目前它额外增加了两个“有用”字段并存储它们。

或者,您可以使用 Pandas 来工作,而不是制作自己的 CSV:

df = pd.read_json(json_raw)
df.to_csv(f_output)

删除 csv_output 行。但这需要一些额外的工作来决定如何格式化。

关于python - NVD - 使用 Python 将 JSON 转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47304837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com