本文利用python批量下载NOAA的历史气象数据,需要用到的库如下:
import re
from bs4 import BeautifulSoup
import urllib.request
import ssl
第一步,进入NOAA下载网站,NOAA历史气象数据下载链接:https://www1.ncdc.noaa.gov/pub/data/paleo/;
第二步,选择所需要的数据,本文下载亚洲区域的树轮原始测量数据,复制所需批量下载数据的网页链接;
第三步,请求获取链接响应,并以ASCII编码方式读取该链接的响应文件;
my_url = urlib.request.urlopen().read().decode(‘ascii’)
第四步,使用Bs4解析所获取的响应文件;
soup =BeautifulSoup(my_url, ‘lxml’)
第五步,查看网页源代码,搜寻网页源代码中所需的信息,例如本文需要获取所有的.rwl文件的超链接,做如下搜寻:
url_list = soup.find_all(herf=re.compile(“.rwl”))
第六步,创建数组存储第五步所获取的所有超链接;
urls = []
For i in url_list[1:]
urls.append(‘访问的网站链接’ +i.get('href'))
第七步,将链接内容下载至本地,并存储在指定文件夹(注意:存储路径末尾以 / 结尾,否则下载文件会存储到上一级目录) ;
for i, url in enumerate(urls):
file_name="存储路径"+url.split('/')[-1]
urllib.request.urlretrieve(url, file_name)
附上本文下载所有亚洲地区树轮观测数据的全部代码:
# -*- coding:utf-8 -*-
# this file is used to download tree_ring data massively from NOAA for paleoclimate
# 2022-03-06
# author: ming
# using BeautifulSoup
import re
from bs4 import BeautifulSoup
import urllib.request
import ssl
TR_url = 'https://www1.ncdc.noaa.gov/pub/data/paleo/treering/measurements/asia/'
my_url = urllib.request.urlopen(TR_url).read().decode('ascii')
soup = BeautifulSoup(my_url,'lxml')
url_list=soup.find_all(href=re.compile(".rwl"))
print('step1 has fininshed!')
urls=[]
for i in url_list[1:]:
urls.append('https://www1.ncdc.noaa.gov/pub/data/paleo/treering/measurements/asia/'+i.get('href'))
print ('step2 has finished!')
for i, url in enumerate(urls):
file_name = "D:\my_data\climate_factor_data\ASM_domain/tree_ring\Asia_all_NOAA/"+url.split('/')[-1]
urllib.request.urlretrieve(url, file_name)
print ('congratulations! you got them all!')