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

news/2024/9/18 23:04:20/ 标签: selenium, chrome, arcgis

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 osdriver = 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 = 1while 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 += 1next = 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.ppmy.cn/news/1525836.html

相关文章

社交媒体的未来:Facebook如何通过AI技术引领潮流

在数字化时代的浪潮中&#xff0c;社交媒体平台不断演变&#xff0c;以适应用户需求和技术发展的变化。作为全球领先的社交媒体平台&#xff0c;Facebook在这一进程中扮演了重要角色。尤其是人工智能&#xff08;AI&#xff09;技术的应用&#xff0c;正在深刻地改变Facebook的…

HTTP反向代理教学:轻松实现代理IP的妙用

在当今互联网时代&#xff0c;代理IP已经成为了很多人上网必不可少的工具。无论是为了保护隐私&#xff0c;还是为了更好地管理网络流量&#xff0c;代理IP都能发挥重要作用。今天&#xff0c;我们就来聊聊HTTP反向代理这个神奇的东西&#xff0c;教你如何轻松实现代理IP的妙用…

[git] MacBook 安装git

文章目录 1.Mac Git 安装2. 开发者工具安装 CommandLineTools安装完成&#xff0c;错误解决 3. git 账户配置账户设置生成秘钥git 或者 gitee 仓库添加公钥查看全局账户命令多账户设置config文件测试连接clone到本地 1.Mac Git 安装 Mac一般自带Git工具&#xff0c;也就是说已…

4K投影仪选购全攻略:全玻璃镜头的当贝F6,画面细节纤毫毕现

在当今的投影市场上&#xff0c;4K投影仪已经成了主流产品&#xff0c;越来越多家庭开始关注如何选择一款性价比高、口碑好的4K投影仪。4K投影仪其实指的是具备3840*2160像素分辨率投影仪&#xff0c;它能够提供更清晰、更细腻、更真实的画面效果。 那么4K投影仪该怎么选&…

uniapp child.onFieldChange is not a function

uni-forms // 所有子组件参与校验,使用 for 可以使用 awiatfor (let i in childrens) {const child childrens[i];let name realName(child.name);if (typeof child.onFieldChange function) {const result await child.onFieldChange(tempFormData[name]);if (result) {…

EasyExcel拿表头(二级表头)爬坑,invokeHeadMap方法

OK&#xff0c;不废话&#xff0c;直接开干!说实话是有些坑&#xff0c;或者是我不会用吧 模板如下&#xff1a; invokeHeadMap 这个方法其实针对第一行就是表头的完全没问题。针对第二行的&#xff0c;我DEBUG拿到的是这样很明显&#xff0c;他拿到了第一行&#xff1b;既然…

python知识点100篇系列(17)-替换requests的python库httpx

Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,使用Requests可以轻而易举的完成浏览器可有的任何操作。 但是在python3.6之后,出现了一个requests的替代选项; httpx httpx是Python新一代的网络请求库…

【期末复习】软件项目管理

前言&#xff1a; 关于软件项目管理这一科目的重要期末考点&#xff0c;希望对你有帮助。 目录 质量管理可能遇到的问题 软件项目质量管理 软件项目风险管理 进度 题1 题2 题3 成本 题1 题2 题3 质量管理可能遇到的问题 (1)没有制定质量管理计划&#xff1a; (2)…

【STM32】外部中断

当程序正常运行执行main函数&#xff0c;此时如果外部中断来了&#xff0c;执行外部中断函数&#xff0c;实现相应的功能&#xff0c;然后就可以回到main. 一般stm32芯片每个引脚都有自己的外部中断&#xff0c;但是为了限制&#xff0c;会有一个中断线&#xff0c;对应一个中断…

每天五分钟玩转深度学习PyTorch:模型参数优化器torch.optim

本文重点 在机器学习或者深度学习中,我们需要通过修改参数使得损失函数最小化(或最大化),优化算法就是一种调整模型参数更新的策略。在pytorch中定义了优化器optim,我们可以使用它调用封装好的优化算法,然后传递给它神经网络模型参数,就可以对模型进行优化。本文是学习第…

谷歌-BERT-“bert-base-chinese ”

1 需求 2 接口 3 示例 4 参考资料 在Hugging Face上下载并使用Bert-base-Chinese_bert-base-chinese下载-CSDN博客 3 文本分类入门finetune&#xff1a;bert-base-chinese-CSDN博客 4如何对BERT 微调-案例_tokenizer input max length: 1000000000000000019884-CSDN博客 基…

什么是国企和央企

央企和国企是中国经济体系中的两种重要企业类型&#xff0c;它们都是国有企业的一部分&#xff0c;但在管理层级和职能上有所不同。 1. 央企&#xff08;中央企业&#xff09; 央企全称为中央直属企业&#xff0c;是指直接由中国国务院国有资产监督管理委员会&#xff08;国资…

健身管理|基于java的健身管理系统小程序(源码+数据库+文档)

健身管理系统|健身管理系统小程序 目录 基于java的健身管理系统小程序 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…

工作流技术(WorkFlow)

什么是工作流 1.使用编程语言完成一套固定的审批流程 例如请假审批流程 订单配送流程 入职&#xff0c;辞职审批流程 2.使用场景 业务类&#xff1a;合同审批流程、订单处理流程、出入库审批流程等。 行政类&#xff1a;请假流程、出差流程、用车流程、办公用品申请流程…

上海亚商投顾:沪指探底回升 华为产业链午后爆发

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日探底回升&#xff0c;深成指、创业板指盘中跌逾1%&#xff0c;午后集体拉升翻红。华为产业链午后走强…

树莓派智能语音助手实现音乐播放

树莓派语音助手从诞生的第一天开始&#xff0c;我就想着让它能像小爱音箱一样&#xff0c;可以语音控制播放音乐。经过这些日子的倒腾&#xff0c;今天终于实现了。 接下里&#xff0c;和大家分享下我的实现方法&#xff1a;首先音乐播放模块用的是我在上一篇博文写的《用sound…

前端用html写excel文件直接打开

源码 <html xmlns:o"urn:schemas-microsoft-com:office:office" xmlns:x"urn:schemas-microsoft-com:office:excel" xmlns"http://www.w3.org/TR/REC-html40"> <head><meta charset"UTF-8"><!--[if gte mso 9]&…

JavaEE:文件内容操作(二)

文章目录 文件内容操作读文件(字节流)read介绍read() 使用read(byte[] b) 使用 read(byte[] b, int off, int len) 使用 写文件(字节流)write介绍write(int b) 使用write(byte[] b) 使用write(byte[] b, int off, int len) 使用 读文件(字符流)read() 使用read(char[] cbuf) 使…

Python文本数据切分及HTML数据处理

要实现这个功能,你可以使用Python的字符串处理方法,结合正则表达式来找到合适的切分点。下面是一个简单的实现示例: import re def split_text(text, max_length=50): # 使用正则表达式匹配句子结束符"。!"等,并尝试在此处分割 sentences = re.split((?…

基于python+django+vue的视频点播管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的视…