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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

zscore归一化: 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 到刚创建的项目目录下,使用npm install安装所需要的依赖包,再使用npm run dev即可启动项目 配置 vite.config.js 添加process.env配置,如果下面 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中…

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

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

嵌入式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…

VB:顺序查找

VB:顺序查找 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 这个特性非常有用, 使用ROOM在编辑PCB时,可以很方便的整体拖动局部器件和电路图,为模块化电路设计提供便利 常规的设计模式应该采用垂直模式, 由顶层-中间层-底层, 顶层设计整体的框图连接&#xff…

JavaSE【 String 类】(2)(

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

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

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

向量数据库,能让AI再次起飞吗?

9月7-8日,深圳国际会展中心18号馆 来了,来了,腾讯面向产业互联网领域规格最高、规模最大、覆盖最广的年度科技盛会 -——- 腾讯全球数字生态大会。 9 月 7 日,我们将聚焦产业未来发展新趋势,针对云计算、大数据、人工…

滴滴:二季度中国出行营收同比增长57%,6月日均单量超3000万单

9月9日,滴滴在其官网发布2023年第二季度业绩报告,二季度滴滴实现总收入488亿元,同比增长52.6%;归属于滴滴普通股股东的净亏损为3亿元,经调整EBITA亏损1000万元。 分业务来看,二季度滴滴中国出行&#xff0…

fastjson漏洞复现

文章目录 启动环境漏洞复现下载bp插件漏洞扫描dnslog测试是否向外请求资源用工具构造rmi服务器 反弹shell 启动环境 到vulhub目录下 cd vulhub/fastjson/1.2.24-rce安装环境并启动: sudo docker-compose up -d && sudo docker-compose up -d启动成功&…

详解TCP/IP的三次握手和四次挥手

文章目录 前言一、TCP/IP协议的三次握手1.1 三次握手流程 二、TCP/IP的四次挥手2.1 四次挥手流程 三、主要字段3.1、标志位(Flags)3.2、序号(sequence number)3.3、确认号(acknowledgement number) 四、状态…

MySQL——事务

一、事务的开始与结束 一个数据库事务由一条或多条sql语句构成,它们形成一个逻辑的工作单元。这些sql语句要么全部执行成功,要么全部执行失败。 1.1.事物的开始 1.对于DDL(create,alter,drop)和DCL&…

Java 中如何实现序列化?

什么是序列化?Java 中如何实现序列化? 在 Java 编程中,序列化是一种将对象转换为字节流的过程,可以将对象在网络中传输或者保存到磁盘中。序列化可以将对象的状态保存下来,以便在需要时重新创建对象。Java 中提供了一…

Android 10.0 禁用adb shell input输入功能

1.前言 在10.0的产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接下来分…