现在很多数据提供HTTPServer下载服务,在这里介绍一种普遍适用的利用URL批量下载数据的python方法
前言
很多数据支持FTP下载,也提供OPeNDAP方式下载。两者的差异是显而易见的:
(1)FTP下载的数据量很大,因为是全球模式,一个要素如流速东分量可能在1000MB左右的量级,365天累计下来是天量。国内的网速几乎是不可能支持的,另外,存储容量也不允许。
(2)OPeNDAP方式可以指定区域、时间、要素下载,换言之,大家按需索取,针对性要强很多。
Requests库
Requests 是用Python语言编写,基于urllib,采用Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到。可以说,Requests 完全满足如今网络的需求。
py库安装
pip install requests
导入所需要的包
import requests
单个数据下载
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
批量下载
一:时间序列数据
一般时间序列数据的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即可。
问题:用这个方法看不到单个数据的下载进程,如果卡住发现不了,只能判断单个数据下载“结束”
参考:
Python’s Requests Library (Guide) – Real Python
欢迎关注公众号遥感迷,一起学习探究