当前位置: 首页 > news >正文

【Science Data Bank】数据集下载脚本

下载脚本

由于频繁下载会出现429错误,所以加了延时和重试,但是错误仍然不可避免,可以反复运行代码进行下载

import requests  
import os  
from urllib.parse import urlparse, parse_qs  
import time  headers = {  'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'  
}  def download_file_from_link(url, output_dir, max_retries=5, delay=15):  # 解析URL,获取文件名  parsed_url = urlparse(url)  query_params = parse_qs(parsed_url.query)  file_name = query_params.get('fileName', ['unknown'])[0]  # 构造本地文件路径  local_file_path = os.path.join(output_dir, file_name)  for attempt in range(max_retries):  try:  # 在每次请求之前等待指定的延迟时间(秒)  time.sleep(delay)  # 发送GET请求并保存文件  with requests.get(url, stream=True, headers=headers) as r:  r.raise_for_status()  # 如果请求失败,这将引发HTTPError异常  with open(local_file_path, 'wb') as f:  for chunk in r.iter_content(chunk_size=8192):  if chunk:  f.write(chunk)  print(f"Downloaded {local_file_path} (attempt {attempt+1}/{max_retries})")  return  # 下载成功,退出循环  except requests.exceptions.RequestException as e:  print(f"Error downloading {url} (attempt {attempt+1}/{max_retries}): {e}")  if attempt == max_retries - 1:  print(f"Max retries reached for {url}. Giving up.")  # 这里可以选择抛出一个异常,或者记录日志等  # 读取文本文件中的链接,每行一个链接  
file_path = 'data.txt'  # 假设links.txt与脚本在同一目录下,且每行包含一个链接  
output_dir = 'data'  # 下载文件的输出目录  if not os.path.exists(output_dir):  os.makedirs(output_dir)  with open(file_path, 'r', encoding='utf-8') as file:  # 假设链接文件是UTF-8编码  links = file.readlines()  # 遍历链接列表并下载文件  
for link in links:  link = link.strip()  # 去除链接前后的空白字符  if link:  download_file_from_link(link, output_dir)  print("All files have been processed.")

找出未成功下载的文件脚本

如果最后仅有个位数文件未被下载,可以先找出未被成功下载的文件然后手动下载

import os  # 文本文件和下载目录的路径  
text_file_path = 'data.txt'  # 假设这个文件包含你要检查的URL列表  
download_dir = 'data'  # 下载文件的目录  # 读取文本文件中的链接  
with open(text_file_path, 'r', encoding='utf-8') as file:  links = file.readlines()  # 遍历链接列表并检查文件是否存在  
for link in links:  link = link.strip()  # 去除链接前后的换行符和空白字符  if link:  # 解析URL,获取文件名  file_name_start = link.rfind('fileName=') + 9  file_name = link[file_name_start:].split('&')[0]  # 提取fileName参数的值  # 构造本地文件路径  local_file_path = os.path.join(download_dir, file_name)  # 检查文件是否存在  if os.path.exists(local_file_path):  
#             print(f"{file_name} 已下载。")passelse:  print(f"{file_name} 未下载。")

上述脚本请自行修改文件路径。

相关文章:

  • python-日历库calendar
  • maven学习小结
  • ubuntu 22.04 升级到24.04
  • 手机号码的校验
  • 【昇思25天学习打卡营打卡指南-第一天】基本介绍与快速入门
  • 三分忙,七分瞎忙!明天起,做个清闲的打工人~
  • H5禁止页面缩放的方法汇总
  • 确保数据一致性
  • 相机的标定
  • LeetCode206-反转链表
  • 常用的Excel函数
  • 应用无感,透明加密!麒麟信安商用密码改造方案助力密改合规
  • 排序-快速排序
  • css 文字两端对齐
  • 转让北京劳务派遣许可证公司需要多少钱办理要求有哪些
  • 4个实用的微服务测试策略
  • C# 免费离线人脸识别 2.0 Demo
  • github从入门到放弃(1)
  • iOS 系统授权开发
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • JavaScript中的对象个人分享
  • Linux后台研发超实用命令总结
  • markdown编辑器简评
  • node.js
  • React-生命周期杂记
  • Vue官网教程学习过程中值得记录的一些事情
  • 阿里云Kubernetes容器服务上体验Knative
  • 测试开发系类之接口自动化测试
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 构建工具 - 收藏集 - 掘金
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 机器人定位导航技术 激光SLAM与视觉SLAM谁更胜一筹?
  • 三分钟教你同步 Visual Studio Code 设置
  • 微信支付JSAPI,实测!终极方案
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 阿里云API、SDK和CLI应用实践方案
  • ​TypeScript都不会用,也敢说会前端?
  • # 数仓建模:如何构建主题宽表模型?
  • #if 1...#endif
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)spring boot智能服药提醒app 毕业设计 102151
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (利用IDEA+Maven)定制属于自己的jar包
  • (算法设计与分析)第一章算法概述-习题
  • (一)WLAN定义和基本架构转
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • ./configure,make,make install的作用
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET CF命令行调试器MDbg入门(一)