Files
physical-boot/scripts/nasa1.py
2024-10-18 11:54:55 +08:00

215 lines
8.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import requests
import os
import time
import re
import csv
# 定义 API URL
api_url = 'https://radhome.gsfc.nasa.gov/radhome/dev/parts.cfc?method=getParts'
# 设置请求头
headers = {
'accept': 'application/json, text/javascript, */*; q=0.01',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'user-agent': 'Mozilla/5.0',
'x-requested-with': 'XMLHttpRequest',
}
# 获取当前时间戳
current_timestamp = str(int(time.time() * 1000))
# 设置请求数据
data = {
'_search': 'false',
'nd': current_timestamp,
'rows': '10000',
'page': '1',
'sidx': 'partnumber',
'sord': 'asc',
}
# 创建文件夹以保存文件
os.makedirs('downloaded_files', exist_ok=True)
# 文件前缀
file_prefix = 'https://radhome.gsfc.nasa.gov/radhome/papers/'
# CSV 表头
csv_header = [
"序号", "试验对象类型", "试验开始日期", "试验结束日期", "试验对象名称", "试验对象型号",
"试验对象数量", "试验性质", "试验目的", "装置名称", "数据提供单位", "试验委托单位",
"失效判据", "失效数量", "试验结果描述", "成果", "来源项目名称", "来源项目类型",
"分类", "元器件名称", "元器件型号", "元器件批号", "生产单位", "是否国产",
"元器件成熟度", "晶圆材料", "晶圆批号", "封装材料", "封装技术", "是否倒装",
"制造工艺", "工艺特征尺寸", "工艺平台", "工艺代号", "工艺版本", "质量等级",
"加固措施", "工作原理", "供货能力", "应用经历", "规范手册", "器件图片",
"电子系统分类", "电子系统名称", "电子系统型号", "生产单位", "电子系统功能",
"电子系统加固措施", "电子系统图片", "材料名称", "材料型号", "材料组分",
"材料用途", "材料生产单位", "材料物理结构", "材料使用经历", "辐照试验大纲",
"大纲审核专家类别", "辐照试验所依据的标准规范", "试验步骤(过程)描述", "辐照过程是否加电",
"直流偏置条件描述", "交流偏置条件描述", "时钟频率", "测试图形", "其他偏置条件",
"辐照偏置原理图", "测试方式", "测试原理图", "试验用仪器名称", "试验用仪器型号",
"试验用仪器生产厂家", "试验用仪器检定证书", "试验用软件名称", "试验用软件开发单位",
"试验用软件版本号", "试验现场照片", "测试人员姓名", "测试人员单位", "测试人员电话",
"装置运行人员", "第三方人员", "第三方人员单位", "第三方人员电话", "其他需要说明的事项",
"是否采用铅铝屏蔽", "剂量率", "总剂量", "剂量等效材料", "试验对象编号", "测试参数名称",
"测试参数单位", "测试参数结果", "是否为加速试验后数据", "是否为退火数据",
"退火温度", "退火时间", "原始数据", "数据处理方法", "其他需要说明的事项"
]
def scrape():
# 发送请求
response = requests.post(api_url, headers=headers, data=data)
response.raise_for_status() # 检查请求是否成功
# 解析 JSON 数据
json_data = response.json()
# 遍历数据并下载文件
for row in json_data['ROWS']:
part_number = row[0] # 部件编号
file_links_str = row[4] # 文件链接
# 使用正则表达式分隔文件名
file_links = re.split(r';|(?<=\.pdf)', file_links_str)
# 创建目录
part_number_dir = os.path.join('downloaded_files', part_number)
os.makedirs(part_number_dir, exist_ok=True)
# 创建 CSV 文件
csv_file_path = os.path.join(part_number_dir, 'data.csv')
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file:
csv_writer = csv.writer(csv_file)
csv_writer.writerow(csv_header) # 写入表头
# 填写 CSV 数据
csv_row = [
"", # 序号
"", # 试验对象类型
row[3], # 试验开始日期
"", # 试验结束日期
"", # 试验对象名称
row[1], # 试验对象型号
"", # 试验对象数量
row[6], # 试验性质
"", # 试验目的
"", # 装置名称
"", # 数据提供单位
"", # 试验委托单位
"", # 失效判据
"", # 失效数量
"", # 试验结果描述
"", # 成果
"", # 来源项目名称
"", # 来源项目类型
"", # 分类
"", # 元器件名称
"", # 元器件型号
"", # 元器件批号
row[2], # 生产单位
"", # 是否国产
"", # 元器件成熟度
"", # 晶圆材料
"", # 晶圆批号
"", # 封装材料
"", # 封装技术
"", # 是否倒装
"", # 制造工艺
"", # 工艺特征尺寸
"", # 工艺平台
"", # 工艺代号
"", # 工艺版本
"", # 质量等级
"", # 加固措施
"", # 工作原理
"", # 供货能力
"", # 应用经历
"", # 规范手册
"", # 器件图片
"", # 电子系统分类
"", # 电子系统名称
"", # 电子系统型号
"", # 生产单位
"", # 电子系统功能
"", # 电子系统加固措施
"", # 电子系统图片
"", # 材料名称
"", # 材料型号
"", # 材料组分
"", # 材料用途
"", # 材料生产单位
"", # 材料物理结构
"", # 材料使用经历
"", # 辐照试验大纲
"", # 大纲审核专家类别
"", # 辐照试验所依据的标准规范
"", # 试验步骤(过程)描述
"", # 辐照过程是否加电
"", # 直流偏置条件描述
"", # 交流偏置条件描述
"", # 时钟频率
"", # 测试图形
"", # 其他偏置条件
"", # 辐照偏置原理图
"", # 测试方式
"", # 测试原理图
"", # 试验用仪器名称
"", # 试验用仪器型号
"", # 试验用仪器生产厂家
"", # 试验用仪器检定证书
"", # 试验用软件名称
"", # 试验用软件开发单位
"", # 试验用软件版本号
"", # 试验现场照片
"", # 测试人员姓名
"", # 测试人员单位
"", # 测试人员电话
"", # 装置运行人员
"", # 第三方人员
"", # 第三方人员单位
"", # 第三方人员电话
"", # 其他需要说明的事项
"", # 是否采用铅铝屏蔽
"", # 剂量率
"", # 总剂量
"", # 剂量等效材料
"", # 试验对象编号
"", # 测试参数名称
"", # 测试参数单位
"", # 测试参数结果
"", # 是否为加速试验后数据
"", # 是否为退火数据
"", # 退火温度
"", # 退火时间
"", # 原始数据
"", # 数据处理方法
"", # 其他需要说明的事项
]
# 写入 CSV 行
csv_writer.writerow(csv_row)
# 下载文件
for file_name in file_links:
file_name = file_name.strip() # 去除空格
if file_name:
# 拼接文件完整 URL
file_url = file_name if file_name.startswith('http') else file_prefix + file_name
try:
# 下载文件
file_response = requests.get(file_url)
file_response.raise_for_status()
# 保存文件
file_path = os.path.join(part_number_dir, os.path.basename(file_url))
with open(file_path, 'wb') as file:
file.write(file_response.content)
print(f"NASA Download file: {file_path}")
except requests.RequestException as e:
print(f"NASA Download file error : {file_url}error: {e}")
# 输出数据
# for row in json_data['ROWS']:
# print(row)