GOCI L2数据批量下载

项目介绍

前几天受师兄所托,批量下载GOCI数据,本以为会比较简单,结果还是颇费了一些功夫。
思路:用Python爬取GOCI数据下载链接,然后导入下载器进行下载。
改进:后来发现python中有一个wget模块可以直接来下载数据

下载链接爬取:

代码比较简单,不多说,直接上代码:

# -*- coding: utf-8 -*-
# Python 3.6.6
# 模块:requests,re,BeautifulSoup
import requests,re
from bs4 import BeautifulSoup as bs

START_URL = 'https://oceandata.sci.gsfc.nasa.gov/GOCI/L2/' #level 0
BASE_URL = 'https://oceandata.sci.gsfc.nasa.gov' 
START_TIME = 2011
END_TIME = 2019

def Get_level1(url):  #https://oceandata.sci.gsfc.nasa.gov/GOCI/L2/2011/
    resp = requests.get(url)
    pattern = r'<td><a href=\'(.*?)\'>'
    url_list = re.findall(pattern,resp.text)
    return url_list
    
def Get_download_url(url_list,file):
    for url in url_list:
        url = BASE_URL + url
        resp = requests.get(url)
        pattern = r'<td><a href=\'(.*?)\'>'
        down_url_list = re.findall(pattern,resp.text) #用正则提取下载地址
        for down_url in down_url_list:
            text = down_url + '\n'
            print(text)
            file.write(text)
            file.flush()

if __name__=='__main__':
    for year in range(START_TIME,END_TIME):
        #每一年的下载链接存为一个文件
        filename = 'GOCI_L2_' + str(year) + '.txt' 
        file = open(filename,'w')
        url = START_URL + str(year)
        url_list = Get_level1(url)
        Get_download_url(url_list,file)
        file.close()

下载器选择

首先选择的IDM,但文件死活下载不了,弃之;
接下来使用的是FDM,连接成功,下载成功,但为什么改不了同时下载数,我把同时最大下载数都改为1了,结果每次还是一大把文件同时下载,果然不一会IP就被封了;
最后选了BitComet作为下载器,限制同时下载数为2,可。

Python中下载

后来发现了一个wget的第三方模块,可以直接在Python中下载文件。

# -*- coding: utf-8 -*-
# Python 3.6.6
# 模块:time,os,wget
import time,os,wget
filename='GOCI_L2_2012.txt'

#读取下载地址
def get_d_urls(filename):
	d_urls = []
	with open(filename,'r',encoding='utf-8') as f:
		for line in f:
			line = line.replace('\n','')
			d_urls.append(line)
	return d_urls
#下载文件
def get_file(d_url):
	name = d_url.split('/')[-1]
	if os.path.exists(name):
		return 0
	print(time.ctime(),": ", name)
	wget.download(d_url)
	return 1

if __name__=="__main__":
	d_urls = get_d_urls(filename)
	for d_url in d_urls:
		try:
			res = get_file(d_url)
		except:
			continue

新的问题

虽然已经限制了同时下载数,但是每隔两个小时还是会下载不动,需要停个十多分钟才能继续下载。索性学校提供有两个WIFI,只要换个WIFI,IP地址改变后,就可以继续下载。白天还可以手动更改WIFI,但到晚上就比较麻烦了,这里写了个脚本,自动更改WIFI,代码如下:

import os,time
cmd1 = 'netsh wlan connect ssid=eduroam name=eduroam interface="WLAN 3"'
cmd2 = 'netsh wlan connect ssid=ustcnet name=ustcnet interface="WLAN 3"'
Time_Interval1 = 7200
Time_Interval2 = 1200
while True:
	time.sleep(Time_Interval1)
	os.system(cmd1)
	print("EDUROAM:",time.ctime())
	time.sleep(Time_Interval2)
	os.system(cmd2)
	print("USTCNET:",time.ctime())

具体可参考这篇博文:让电脑定时重新连接WIFI的windows脚本
其中ustcnet可以达到10~20M/s,eduroam平均速度在3M/s,所以主要连接ustcnet,两个小时后连接eduroam,再20分钟后换回ustcnet。这样的话平均速度差不多能达到8M/s。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值