干货 | Selenium+chrome自动批量下载地理空间数据云影像

news2024/9/20 6:03:47

1.背景介绍

1.1地理空间数据云

由中国科学院计算机网络信息中心科学数据中心成立的地理空间数据云平台是常见的下载空间数据的平台之一。其提供了较为完善的公开数据,如LANDSAT系列数据,MODIS的标准产品及其合成产品,DEM数据(SRTM 90M,ASTER GDEM 30M),EO-1数据,大气污染插值数据,Sentinel数据,高分一号WFV数据产品,NOAA VHRR 数据产品等。地理空间数据云提供高级检索功能,能够根据数据集、空间位置、时间范围、月份、云量、数据有无进行检索,如图1所示。

图1 地理空间云高级检索功能

1.2 Selenium+Chromedriver

日常工作中经常需要下载多个区域或者长时间段的遥感影像,然而地理空间数据云的高级检索功能中并未提供没有批量下载的功能,人为手动一景一景下载耗时费力。如若能实现数据的自动化批量下载,将会大幅提高工作效率。利用Selenium+ChromeDriver建立爬虫,即可实现自动化批量下载大量数据。

Selenium是一个Web自动化程序,相当于一个机器人,可以模拟并自动处理人类在浏览器上的一些行为,比如点击、填充数据、删除cookie等等一系列操作。Chromedriver是一个驱动chrome浏览器的驱动程序,使用它才可以驱动浏览器。两者结合就能够实现浏览器操作的自动化,简化人力的重复点击劳动。

2.实验操作

2.1环境配置与工具下载

(1)Python没有自带selenium库,需要自行下载,只需要用简单的命令即可实现:

pip install selenium

(2)下载ChromeDriver之前,需要首先确定浏览器的版本,在浏览器中输入chrome://version/,图2红线所示即为浏览器的版本:

图2 浏览器版本查看

(3)接着去下载对应版本的Chromedriver。通常从以下网址下载:

https://npm.taobao.org/mirrors/chromedriver/

2.2浏览器对象创建与网页元素获取

(1)首先导入相关模块,然后创建浏览器对象,指定驱动所在路径,接着打开地理空间数据云的首页。代码如下:

from selenium import webdriver
driver_path = r"F:\Pycharm\GeoCloud\chromedriver.exe"  # 驱动所在路径
browser = webdriver.Chrome(executable_path=driver_path)  # 打开浏览器,指定驱动路径
browser.get('http://www.gscloud.cn/')  # 打开地理空间数据云首页

运行这些代码会打开一个自动控制的浏览器窗口,并显示“Chrome正受到自动测试软件的控制”。

(2)为了模拟我们的点击活动,需要获取感兴趣的网页元素的地址,selenium提供了例如id,name,classname,xpath,linktext的方法获取元素。本实验采取xpath的方法获取需要点击的元素:首先右键点击需要的元素,然后选择检查,在需要的元素上右键复制Xpath,操作步骤如图3所示。

图3 获取元素Xpath

2.3代码实现

配置上述环境之后,下面是具体数据下载的python代码,实现南京地区2000年至今MODIS合成数据集16日的NDVI数据批量下载:

from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
import os

driver = webdriver.Chrome(executable_path=r'F:\Pycharm\GeoCloud\chromedriver.exe')
driver.get('http://www.gscloud.cn/accounts/login_user')

email = driver.find_element_by_xpath('//*[@id="email"]')
email.send_keys('***') #账号
password = driver.find_element_by_xpath('//*[@id="password"]')
password.send_keys('***') #密码
captcha = driver.find_element_by_xpath('//*[@id="id_captcha_1"]')
captcha_sj = input('请输入验证码:').strip()
captcha.send_keys(captcha_sj)

# 模拟点击过程
dr_buttoon = driver.find_element_by_xpath('//*[@id="btn-login"]').click() #输入验证码后点击登入按钮
time.sleep(3)
gjjs = driver.find_element_by_xpath('/html/body/div[1]/div[1]/div[2]/ul/li[2]').click() #点击高级检索
time.sleep(3)
dataset = driver.find_element_by_xpath('//*[@id="dataset-btn"]').click()   #选择数据集
time.sleep(0.5)
plus = driver.find_element_by_xpath('//*[@id="all-datasets-dlg"]/div/div[2]/div/div[2]/ul/li[2]/span[1]').click()  #点击加号
time.sleep(0.5)
select = driver.find_element_by_xpath('//*[@id="all-datasets-dlg"]/div/div[2]/div/div[2]/ul/li[2]/ul/li[16]/div/label').click()  #点击数据集
time.sleep(0.5)
queding = driver.find_element_by_xpath('//*[@id="all-datasets-dlg"]/div/div[3]/button[2]').click()  #确定
time.sleep(0.5)
dituxuanze = driver.find_element_by_xpath('//*[@id="condition-panel"]/div[2]/div[2]/div').click()  #地图选择
time.sleep(0.5)
xingzhengqu = driver.find_element_by_xpath('//*[@id="condition-panel"]/div[2]/div[2]/div/label[1]').click()  #行政区
time.sleep(0.5)
sheng = driver.find_element_by_xpath('//*[@id="provinces-list"]').click()  #省
time.sleep(0.5)
sheng_s = driver.find_element_by_xpath('//*[@id="reg32"]').click()  #省
time.sleep(0.5)
shi = driver.find_element_by_xpath('//*[@id="city-list"]').click()  #市
time.sleep(0.5)
shi_c = driver.find_element_by_xpath('//*[@id="city-list"]/option[9]').click()  #市
time.sleep(0.5)
Time1 = driver.find_element_by_xpath('//*[@id="sdate-input"]')  #Time1
Time1.send_keys('2000-01-01')
time.sleep(0.5)
Time2 = driver.find_element_by_xpath('//*[@id="edate-input"]')  #Time2
Time2.send_keys('2022-12-31')
time.sleep(0.5)
jiansuo = driver.find_element_by_xpath('//*[@id="search-btn"]').click()  #检索

# 开始下载
# #一共是7页
page_num = 49
page = 1

while page <= page_num:
    print('当前下载第{}页'.format(page))
    for tr_num in range(1,11):  # 每页10个
        d_everypage = '//*[@id="result-listview"]/div/table/tr['+str(tr_num)+']/td[2]/div/div/a[2]/span'
        WebDriverWait(driver, 20).until(expected_conditions.visibility_of_element_located((By.XPATH, d_everypage)))  # 翻页后重新定位,否则报错ElementClickInterceptedException:
        element = driver.find_element_by_xpath(d_everypage)
        webdriver.ActionChains(driver).move_to_element(element).click(element).perform()
        time.sleep(600)  #下载间隔
    page += 1
    next = driver.find_element_by_xpath('//*[@id="pager"]/div/table/tr/td[10]/a/span/span/span').click()  # 下一页
    time.sleep(3)

3.实验结果

图4展示了下载的影像中的其中一幅。经过高级检索我们可以发现,符合要求的影像共有487条,人为手动下载必然是很大的工作量,但是使用爬虫可以大大缩减工作量。

图4 实验下载影像

文案 | 陆鼎阳
编辑&校对 | 曹浩宇&杨陵
指导 | 熊礼阳 副教授
侵删

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

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

相关文章

客户需求挖掘的三个步骤

本文将介绍客户需求挖掘的三个关键步骤&#xff0c;帮助企业更好地理解客户&#xff0c;并提供个性化的服务。通过分析客户需求&#xff0c;可以更好地满足客户期望&#xff0c;提升客户满意度和忠诚度。 前言 本文将介绍客户需求挖掘的三个关键步骤&#xff0c;帮助企业更好地…

ZooKeeper--分布式协调服务

文章目录 ZooKeeperzk的由来zk解决了什么问题 ZK工作原理ZK数据模型zk功能1.命名服务2.状态同步3.配置中心4.集群管理 zk部署单机启动zk验证zk zk集群集群角色选举过程1.节点角色状态2.选举ID3.具体过程4.心跳机制5.ZAB协议 ZooKeeper 选举示例1.第一轮投票&#xff1a;2.节点收…

Flutter学习之一搭建开发环境

Flutter学习之一:搭建ununtu系统开发环境 一.背景 随着企业发展跟环境的变化&#xff0c;目前大前端开发越来越火&#xff0c;在国内应该是一个趋势&#xff1b;个人的技术栈主要还是在原生安卓开发上&#xff1b;长江后浪推前浪&#xff0c;如果不及时学习新知识&#xff0c…

中文文本分类详解及与机器学习算法对比

一.文本分类 文本分类旨在对文本集按照一定的分类体系或标准进行自动分类标记&#xff0c;属于一种基于分类体系的自动分类。文本分类最早可以追溯到上世纪50年代&#xff0c;那时主要通过专家定义规则来进行文本分类&#xff1b;80年代出现了利用知识工程建立的专家系统&…

首届云原生编程挑战赛总决赛冠军比赛攻略_greydog.队

关联比赛: 首届云原生编程挑战赛【复赛】实现一个 Serverless 计算服务调度系统 一、初赛赛道一&#xff08;实现一个分布式统计和过滤的链路追踪&#xff09; 赛题分析 1、数据来源 采集自分布式系统中的多个节点上的调用链数据&#xff0c;每个节点一份数据文件。数据格式…

系统架构师考试学习笔记第四篇——架构设计实践知识(21)安全架构设计理论与实践

本章考点&#xff1a; 第21课时主要学习信息系统中安全架构设计的理论和工作中的实践。根据考试大纲,本课时知识点会涉及案例分析题和论文题(各占25分),而在历年考试中,综合知识选择题目中也有过诸多考查。本课时内容侧重于知识点记忆;,按照以往的出题规律,安全架构设计基础知识…

工具知识 | Linux常用命令

参考 linw7的github《鸟哥的Linux私房菜》 一.文件管理 1.文件查找&#xff1a;find2.文件拷贝&#xff1a;cp3.打包解包&#xff1a;tar 二.文本处理 1.(显示行号)查看文件&#xff1a;nl2.文本查找&#xff1a;grep3.排序&#xff1a;sort4.转换&#xff1a;tr5.切分文本&…

Web 基础——Apache

Event Worker 的升级版、把服务器进程和连接进行分析&#xff0c;基于异步 I/O 模型。 请求过来后进程并不处理请求&#xff0c;而是直接交由其它机制来处理&#xff0c;通过 epoll 机制来通知请求是否完成&#xff1b; 在这个过程中&#xff0c;进程本身一直处于空闲状态&am…

【目标检测数据集】铁轨表面缺损检测数据集4789张VOC+YOLO格式

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4789 标注数量(xml文件个数)&#xff1a;4789 标注数量(txt文件个数)&#xff1a;4789 标注…

只有IP地址没有域名怎么实现HTTPS访问?

&#x1f510; 实现IP地址HTTPS访问 &#x1f310; 确认公网IP地址 公网IP&#xff1a;确保你拥有一个公网IP地址&#xff0c;或者内网映射公网&#xff0c;这是实现HTTPS访问的前提。 &#x1f4dd; 选择证书颁发机构&#xff08;CA&#xff09; 选择CA&#xff1a;选择一个…

【Qt】Qt音频

Qt 音频 在 Qt 中&#xff0c;⾳频主要是通过 QSound 类来实现。但是需要注意的是 QSound 类只⽀持播放 wav 格式的⾳频⽂件。也就是说如果想要添加⾳频效果&#xff0c;那么⾸先需要将 ⾮wav格式 的⾳频⽂件转换为 wav 格式。 【注意】使⽤ QSound 类时&#xff0c;需要添加模…

【C#Mutex】 initiallyOwned错误引起的缺陷

临界区只能对同一个进程的不同线程同步&#xff0c;互斥量可以跨进程同步。典型应用场景&#xff1a;两个exe会操作同一个注册表项。 错误代码 封装类 public class CMutexHelp : IDisposable {public CMutexHelp(){s_mutex.WaitOne();} private static Mutex s_mutex …

深度学习-目标检测(二)Fast R-CNN

一&#xff1a;Fast R-CNN Fast R-CNN 是一篇由Ross Girshick 在 2015 年发表的论文&#xff0c;题为 “Fast R-CNN”。这篇论文旨在解决目标检测领域中的一些问题&#xff0c;特别是传统目标检测方法中存在的速度和准确性之间的矛盾。 论文摘要&#xff1a;本文提出了一种基于…

关于tomcat如何设置自启动的设置

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Windows 下的设置服务自启2.1 服务的注册2.2 开启自启 三、MacOS下设置服务自启…

ROS CDK魔法书:建立你的游戏王国(Python篇)

引言 在虚拟游戏的世界里&#xff0c;数字化的乐趣如同流动的音符&#xff0c;谱写着无数玩家的共同回忆。而在这片充满创意与冒险的乐园中&#xff0c;您的使命就是将独特的游戏体验与丰富的技术知识相结合&#xff0c;打造出令人难以忘怀的作品。当面对如何实现这一宏伟蓝图…

【数据结构】4——树和森林

数据结构——4树和森林 笔记 文章目录 数据结构——4树和森林树的存储结构双亲表示法孩子链表孩子兄弟表示法&#xff08;二叉树表示法、二叉链表表示法&#xff09; 树与二叉树转换森林和二叉树转化森林转二叉树二叉树转森林 树和森林的遍历树先根后根层次 森林 树的存储结构…

使用nvm工具实现多个nodejs版本的维护和切换

NodeJS的升级比较快&#xff0c;在开发中要使用最新的版本&#xff0c;必须经常升级&#xff0c;但对于一些老项目可能又要使用低版本的NodeJS&#xff0c;虽然可以在系统中同时安装多个NodeJS的版本&#xff0c;然后通过修改环境变量的方式实现切换&#xff0c;但这种方法太麻…

断点回归模型

断点回归&#xff08;Regression Discontinuity Design, RDD&#xff09;是一种准实验设计方法&#xff0c;用于评估政策或其他干预措施的效果。这种方法利用了一个清晰的阈值或“断点”&#xff0c;在这个阈值上&#xff0c;处理状态&#xff08;例如是否接受某种干预&#xf…

浅谈为什么数据库要用B树

朋友,你有没有遇到过这样的情况?明明数据库里存的东西还不算太多,可一查数据,页面加载慢得像蜗牛?别急,问题可能出在你的数据库索引上。而今天我要跟你聊的,就是在数据库里被广泛应用的B树(B-Trees),它可是提升数据库性能的秘密武器。听起来有点深奥?别担心,我会用…

C程序设计——再说说函数参数的值传递

上一篇的最后&#xff0c;我强调了C语言里&#xff0c;所有函数参数的传递&#xff0c;都是值传递&#xff0c;即形参值改变&#xff0c;不影响实参的值。 指针作为函数参数 我们知道&#xff0c;指针也是C语言的一个类型&#xff0c;所以指针&#xff0c;也可以作为函数参数…