Python—下载清华大学鹏城实验室遥感数据

当想下载清华大学鹏城实验室10m土地利用数据的时候,发现他们的下载方式很奇怪,只能一页页的点名称全选 ,然后批量下载,再一个个的加入浏览器下载,当一次下载过多就回卡顿和下载失败,所以就有了想用python进行下载的想法。
在这里插入图片描述

1 获取headers

F12打开控制台,看Network界面,然后随机下载一个文件
在这里插入图片描述
点击下载后,可以看到下载文件名,就可以得到自己的headers,这一步主要是为了获得“Authorization”进行身份认证
在这里插入图片描述

然后返回网页,查看网页源代码,发现文件的命名方式为“1-FROM_GLC10_2017-tif-fromglc10v01_”+经纬度,那我们就以“1-FROM_GLC10_2017-tif-fromglc10v01_”在源代码中搜索,可以获取所有的文件名
在这里插入图片描述

2 下载代码

代码只能下载有命名规律的文件,无规律的文件请自行排查下载

from http import cookiejar
from urllib import request
import os 
import re
import numpy as np
from subprocess import call
from multiprocessing import Pool#填入自己获取的headers
headers={"Accept":"",
"Authorization":"",
"Referer":"",
"User-Agent":""   
}
#返回从网页源码中获取的文件名
def filename():password_manager = request.HTTPPasswordMgrWithDefaultRealm()password_manager.add_password(None, "http://data.starcloud.pcl.ac.cn", '账号', '密码')#自行修改cookie_jar = cookiejar.CookieJar()opener = request.build_opener(request.HTTPBasicAuthHandler(password_manager),request.HTTPCookieProcessor(cookie_jar))request.install_opener(opener)url="http://data.starcloud.pcl.ac.cn/zh/resource/1"myrequest = request.Request(url,headers=headers)response = request.urlopen(myrequest)html=response.read()names=re.findall(r'1-FROM_GLC10_2017-tif-fromglc10v01.*?"', html.decode('utf-8'))names=np.array(names)return names#下载链接的构成为download_url+文件名
def download(name):download_url="http://data.starcloud.pcl.ac.cn/api/resourceFile/download/"name=name.split('"')[0]fileurl=download_url+namerequest1 = request.Request(fileurl,headers=headers)response1 = request.urlopen(request1)#自行修改下载文件夹filepath=os.path.join("E:/Download/2017_10m",fileurl.split("tif-")[-1]+".tif")if os.path.exists(filepath):#判断文件是否存在print(name + "exist")else:f = open(filepath,'wb')f.write(response1.read())f.close()print(name+"下载完成!")def main():names=filename()po=Pool(5)po.map_async(download,names)    po.close()po.join()if __name__ == '__main__':files = os.listdir("E:/Download/2017_10m") # 获取当前文件夹下的所有文件file_num = len(filename())while len(files)!=file_num: #python可能未下载完就中断,加个文件数判定print("未完全下载")main()files = os.listdir("E:/Download/2017_10m")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73554.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战:用激活函数、Keras框架解决分类问题

文章目录 实战:用激活函数、Keras框架解决分类问题介绍数据加载数据预处理模型设计模型编译模型训练模型评价总结 实战:用激活函数、Keras框架解决分类问题 介绍 本文将介绍如何使用激活函数和Keras框架解决分类问题。分类问题是机器学习中的一种基本问…

<el-input-number>显示两位数字;如果是一位数字的话前面补0

可以通过自定义 formatter 函数来实现。具体步骤如下&#xff1a; 在 <el-input-number> 上添加 :formatter 属性&#xff0c;值为 formatter 函数名。 在 methods 中定义 formatter 函数&#xff0c;该函数接收一个参数 value&#xff0c;表示当前输入框中的值。 在 f…

ElementUI浅尝辄止26:Notification 通知

悬浮出现在页面角落&#xff0c;显示全局的通知提醒消息。 1.如何使用&#xff1f; 适用性广泛的通知栏 //Notification 组件提供通知功能&#xff0c;Element 注册了$notify方法&#xff0c;接收一个options字面量参数&#xff0c;在最简单的情况下&#xff0c;你可以设置tit…

C++项目实战——基于多设计模式下的同步异步日志系统-①-项目介绍

文章目录 专栏导读项目介绍开发环境核心技术环境搭建日志系统介绍1.为什么需要日志系统2.日志系统技术实现2.1同步写日志2.2异步写日志 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&a…

Java23种设计模式之【单例模式】

目录 一.单例模式的起源&#xff0c;和应用场景 1.单例模式的前世今生&#xff01; 2.什么是单例模式&#xff1f; 2.1使用单例模式的注意事项 2.2如何理解单例模式&#xff1f; 2.3单例模式的优势以及不足&#xff01; 2.4使用场景 二.实现 1.实现思路 1.1创建一个 S…

基于SSM的网络游戏公司官方平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

python实现zscore归一化和minmax标准化

zscore归一化&#xff1a; minmax from sklearn import preprocessing from sklearn.preprocessing import StandardScaler import numpy as np# 数据 x np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]]) print(----------------minmaxscaler标准化-------------) # 调用minma…

初始化一个 vite + vue 项目

创建项目 首先使用以下命令创建一个vite项目 npm create vite然后根据提示命令 cd 到刚创建的项目目录下&#xff0c;使用npm install安装所需要的依赖包&#xff0c;再使用npm run dev即可启动项目 配置 vite.config.js 添加process.env配置&#xff0c;如果下面 vue-route…

mysql课堂笔记 mac

目录 启动mac上的mysql 进入mysql mac windows 创建数据库 创建表 修改字段数据类型 修改字段名 增加字段 删除字段 启动mac上的mysql sudo /usr/local/mysql/support-files/mysql.server start 直接输入你的开机密码即可。 编辑 进入mysql mac sudo /usr/local…

Java认识异常(超级详细)

目录 异常的概念和体系结构 异常的概念 异常的体系结构 异常的分类 1.编译时异常 2.运行时异常 异常的处理 防御式编程 LBYL EAFP 异常的抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 异常的处理流程 异常的概念和体系结构 异常的概念 在Java中…

一篇文章教会你如何降低代码的冗余度——探索指针数组,数组指针,函数指针,函数指针数组,回调函数的奥妙

前言&#xff1a;人们总说指针是c语言的灵魂&#xff0c;是因为指针的使用技巧是“千姿百态”的&#xff0c;程序员可以通过指针来直接访问内存&#xff0c;这就赋予了它功能的多样性以及更多意想不到的编程技巧与方式&#xff0c;在本篇文章中&#xff0c;笔者就给大家带来指针…

嵌入式Linux驱动开发(LCD屏幕专题)(二)

一、结合APP分析LCD驱动程序 1、open app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 -------------------------------------------------------------- kernel:fb_open // fbmem.cstruct fb_info *info;info get_fb_info(fbidx);if (info->fbop…

关于B+树

在数据库管理系统中&#xff0c;使用b树作为索引的数据结构&#xff0c;相比于B树和二叉树&#xff0c;有以下几个好处&#xff1a; b树的非叶子节点只存储关键字和指针&#xff0c;不存储数据&#xff0c;这样可以增加每个节点的关键字数量&#xff0c;降低树的高度&#xff…

VB:顺序查找

VB&#xff1a;顺序查找 Private Sub Command1_Click()Dim i%, m%Dim x(1 To 10) As SingleFor i 1 To 10x(i) Val(InputBox("请输入"))Next im seqSearch(x, 10)If (m 1) ThenPrint "已找到"ElsePrint "未找到"End If End Sub Function se…

Altium 高级技巧 在扁平原理图中创建多个ROOM

Altium 的 ROOM 这个特性非常有用&#xff0c; 使用ROOM在编辑PCB时&#xff0c;可以很方便的整体拖动局部器件和电路图&#xff0c;为模块化电路设计提供便利 常规的设计模式应该采用垂直模式&#xff0c; 由顶层-中间层-底层&#xff0c; 顶层设计整体的框图连接&#xff…

插入排序(Java实现)

前言 稳定性&#xff1a;如果一个排序是稳定的&#xff0c;是可以变成不稳定的&#xff0c;此时这个排序归结为稳定&#xff0c;但是如果这个排序本身是不稳定的&#xff0c;是不可以变成稳定的&#xff0c;此时这个排序是不稳定的。 过程&#xff1a;如果数组中只有一个元素&a…

【JVM】synchronized锁升级的过程

目录 如何从无锁状态到偏向锁状态&#xff1a; 偏向锁升级为轻量级锁&#xff1a; 轻量级锁到自旋锁的状态&#xff1a; 自旋锁升级为重量级锁&#xff1a; 下面是自旋锁升级到重量级锁的过程&#xff1a; 重量级锁的特点如下&#xff1a; synchronized锁分为三种状态——…

点云从入门到精通技术详解100篇-基于几何特征的三维点云配准

目录 前言 研究现状 基于几何特征的方法 ICP算法及其变体 基于学习的方法

JavaSE【 String 类】(2)(

一、字符串的不可变性 1.String本身不可变 字符串修改 注意&#xff1a;尽量避免直接对 String 类型对象进行修改&#xff0c;因为 String 类是不能修改的&#xff0c;所有的修改都会创建新对象&#xff0c;效率 非常低下。 public static void main(String[] args) {/*** S…

sublime编辑latex 出现参考文献无法编译报错:citation “...” undefined

问题描述 使用sublime编译latex文件时&#xff0c;参考文献按照常规的方式放好&#xff0c;ctrl B 编译的时候&#xff0c;显示找不到参考文献&#xff0c;编译出的pdf文件也没有references&#xff1a; 但是把文件放到overleaf上就可以直接编译出来&#xff0c;说明是本地编…