python_爬虫下载GLDAS数据

利用python requests以及正则表达式匹配来下载GLDAS数据,也可略微修改后用于Modis数据下载。

# -*- coding: utf-8 -*-
"""
Created on Thu Aug  9 11:36:33 2018

@author: Administrator
"""

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests
import re

#加入Cookie和User-Agent信息

Cookieinfo=t='可以在登录页面按F12查询,首先输入账户和密码,按F12,然后回到登录页面选择登录,即可在之前的F12窗口进行查找,下同'
User ='可以在登录页面按F12查询'
authenticity_token='可以在登录页面按F12查询'
username='输入自己的登录账户'
password='输入自己登录密码'
headers = {'Cookie': Cookieinfo,
           'User-Agent': User,
           'Username':username,
           'Password':password,
           'Authenticity_token':authenticity_token
           }

# 需要下载的数据页面,以GLDAS数据1961年1月数据下载页面为例
rawurl = "https://hydro1.gesdisc.eosdis.nasa.gov/data/GLDAS/GLDAS_CLSM025_D.2.0/1961/01/"
#请求页面
resp = requests.get(rawurl, headers=headers).text
soup = BeautifulSoup(resp, 'lxml')
link = soup.find_all('a') # 获取文件的url
reinfo=re.compile(r'GLDAS[0-9a-zA-Z\_.]{25}nc4$')  #正则表达匹配,只下载NC后缀的文件,不下载XML等其他文件类型。
file_=r'G:\GLDAS\DAY_DATA\DATA\1961\196101'  #下载文件存储路径
link_dup = []
URL1=[]
for i in link:
    a = i.get('href')
    link_dup.append(a)
link_all = list(set(link_dup)) #列表重复了一遍,可以用set进行去重,再重新排序
for k in link_all:
    if re.findall(reinfo,k):
        print(k)
        URL1.append(k)
#link_all.sort(key=link_dup.index)
crawler_url = []
for h in URL1:       #整理下载路径及存储路径
    a = rawurl + h
#    crawler_url.append(a)
    file_name=file_+'\\'+h

    r = requests.get(a, headers=headers)
    with open(file_name, "wb") as code:
        for chunk in r.iter_content(chunk_size=1024*25): #下载文件
            print(chunk)
            code.write(chunk)
print('下载完成')

 

你可能感兴趣的:(python)