python 爬虫 modis数据登录下载

python 爬虫 modis数据登录下载

网页登陆参考:https://www.cnblogs.com/zhaof/p/7284312.html

""" 代码说明:   用于modis数据的下载。 
                get_download_list 函数,是数据下载部分。download_wait:待下载的数据列表,例如:['MOD09GQ.006/2018.01.01/MOD09GQ.A2018001.h31v06.006.2018003030441.hdf', 'MOD09GQ.006/2018.01.02/MOD09GQ.A2018002.h31v06.006.2018004031248.hdf'],
                save_path:数据保存地址。
                get_cookie 函数,是登录网页。
                username,password:用户名和密码
                """

from bs4 import BeautifulSoup
import requests
import os

def get_download_list(download_wait,save_path):
    
    download_list=[]   # 生成完整的下载链接,保存在download_list 列表中
    url="https://e4ftl01.cr.usgs.gov/MOLT/"
    # 获取下载链接列表
    for i in download_wait:
        download_url=url+i
        print(download_url)
        download_list.append(download_url)
    print(download_list)
    
    # 登录网址,获取cookie
    cookie=get_cookie(username,password)
        
    # 开始下载
    for p in download_list:
        os.chdir(save_path)
        save_name=p.split("/")[-1]
        print("正在下载:",save_name)
        r=requests.get(p,cookies=cookie)
        with open(save_name,"wb") as f:
            f.write(r.content)
        f.close()
        print("下载完成:",save_name)
            
# 获取下载的cookie
def get_cookie(username,password):
    
    Base_URL = "https://urs.earthdata.nasa.gov/home"
    Login_URL = "https://urs.earthdata.nasa.gov/login"
    
    '''
    这里用于获取登录页的html,以及cookie
    :param url: https://urs.earthdata.nasa.gov/home
    :return: 登录页面的HTML,以及第一次的cooke
    '''
    html = requests.get(Base_URL)
    first_cookie = html.cookies.get_dict()
    print("first_cookie:",first_cookie)
    #return response.text,first_cookie
    
    '''
    处理登录后页面的html
    :param html:
    :return: 获取csrftoken
    '''
    soup = BeautifulSoup(html.text,'html.parser')
    res = soup.find("input",attrs={"name":"authenticity_token"})
    token = res["value"]
    print("token:",token)
    #return token
    
    '''
    这个是用于登录
    :param url: https://urs.earthdata.nasa.gov/login
    :param token: csrftoken
    :param cookie: 第一次登录时候的cookie
    :return: 返回第一次和第二次合并后的cooke
    '''
    
    data= {
        "commit": "Log in",
        "utf8":"✓",
        "authenticity_token":token,
        "username":username,
        "password":password
    }
    response = requests.post(Login_URL,data=data,cookies=first_cookie)
    print(response.status_code)
    cookie = response.cookies.get_dict()
    #这里注释的解释一下,是因为之前是通过将两次的cookie进行合并的
    #现在不用了可以直接获取就行
    # cookie.update(second_cookie)
    print("cookie:",cookie)
    return cookie

你可能感兴趣的:(python 爬虫 modis数据登录下载)