这几天开始学习hadoop,一开始就要求ncdc的数据集,作为计算机从业人员深知数据集的重要性,但是网上没有太多相关的直接代码,大部分要么是shell脚本(manjaro前几天刚抽风被我卸了,再让我为了个数据集装回来确实不想干),要么就是用ftp下载文件,不过ncdc官网ftp下载直接报错,一看文章时间还是2014年的文章,emmm,有点老了,所以萌生了自己写脚本的想法。
大体思路如下:先使用 `requests` 下载目录的网页,然后使用BeautifulSoup进行解析,获得所有的超链接,对每个正确的文件超链接进行下载,最后使用文件操作进行保存。
代码如下:
import requests
import os
from bs4 import BeautifulSoup
def download(end):
dire = r'https://www1.ncdc.noaa.gov/pub/data/noaa/isd-lite/'
for ind in range(1901, end): # 下载1901到2020年的数据
os.mkdir('ncdc/'+str(ind))
path = os.path.join(dire + str(ind) + '/')
req = requests.get(path) # 下载网页
soup = BeautifulSoup(req.text, 'html.parser')
for a in soup.find_all('a'): # 获得所有的超链接的名字
name = a.get('href') # bs解析超链接地址(吹爆bs!)
if name[0].isdigit(): # 如果以字母开头就是正确的文件名
realPath = path + name
gzContent = requests.get(realPath).content
with open('./ncdc/'+str(ind)+'/'+name, 'wb') as file:
file.write(gzContent) # 直接写入文件
if __name__ == '__main__':
download(2021)
结果展示: