编程技术分享平台

网站首页 > 技术教程 正文

解放双手,教你用python如何批量下载数据

xnh888 2024-11-12 13:47:32 技术教程 31 ℃ 0 评论

工具箱

python批量下载数据

现在很多数据提供HTTPServer下载服务,在这里介绍一种普遍适用的利用URL批量下载数据的python方法

01

前言

很多数据支持FTP下载,也提供OPeNDAP方式下载。两者的差异是显而易见的:

(1)FTP下载的数据量很大,因为是全球模式,一个要素如流速东分量可能在1000MB左右的量级,365天累计下来是天量。国内的网速几乎是不可能支持的,另外,存储容量也不允许。
(2)OPeNDAP方式可以指定区域、时间、要素下载,换言之,大家按需索取,针对性要强很多。

02

Requests库


Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。可以说,Requests 完全满足如今网络的需求。


py库安装

pip install requests

导入所需要的包

import requests

03

单个数据下载


import requests 


url = 'http://thredds.northwestknowledge.net:8080/thredds/fileServer/TERRACLIMATE_ALL/data/TerraClimate_ws_2010.nc' 


filename= url.split("data/")[1]#取url最后一些关键字作为数据命名
print ("正在下载:",filename)


download = requests.get(url,stream=True ) 
with open("自设路径/"+filename, "wb") as code:#"wb" 以二进制写方式打开,只能写文件
     code.write(download.content)
     
     print("结束,",download.status_code)
#out
正在下载:TerraClimate_ws_2010.nc
结束, 200

04

批量下载


一:时间序列数据

一般时间序列数据的url都有规律可循,即只改变url中的时间,对于这种,我们只要改变url中的时间后循环get即可

import requests 
for yr in range(1990,2021):


 url='h ttp://thredds.northwestknowledge.net:8080/thredds/fileServer/TERRACLIMATE_ALL/data/TerraClimate_ws_'+str(yr)+'.nc' 


filename= url.split("data/")[1]#取url最后一些关键字作为数据命名
print ("正在下载:",filename)


download = requests.get(url,stream=True ) 
with open("自设路径/"+filename, "wb") as code:#"wb" 以二进制写方式打开,只能写文件
     code.write(download.content)
     
     print("结束,",download.status_code)

二:非时间序列

url无规律可循,批量下载时就可以把url先保存在文本里,根据一种循环读取文本中的url后get即可。

问题:用这个方法看不到单个数据的下载进程,如果卡住发现不了,只能判断单个数据下载“结束”。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表