编写脚本下载gazebo仿真器公开的模型数据集

2024-01-21 13:52

本文主要是介绍编写脚本下载gazebo仿真器公开的模型数据集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

编写脚本下载gazebo仿真器公开的模型数据集

  • 问题描述
  • 解决步骤
    • 找到url
    • 提取 name 和 owner,并格式化 URL
    • 编写代码
  • 运行效果

问题描述

编写脚本把gazebo仿真器公开的模型数据集中的所有的models和worlds下载收集。每个模型页面有下载链接,不过页面元素是动态生成的,需要用selenium库模拟点击动作。

解决步骤

找到url

进入gazebo官方网站,点击进入
点击models,进入models模块
在这里插入图片描述
进入models界面后,下拉选择“100”,表示该界面可包含100个模块
在这里插入图片描述

鼠标点击右键,点击“检查”
在这里插入图片描述
按图中所示进行点击,随后并按住”CTRL R"进行刷新
在这里插入图片描述
找到url,并复制
在这里插入图片描述

提取 name 和 owner,并格式化 URL

在这里插入图片描述
name+owner作为每个模块的唯一标识符

编写代码

import requests
from urllib.parse import quote
# 请求的 URL
# page可以自己更改,比如下载完1页后,改为2进行下载第2页,以此类推下载所有,per_page=100代表的是整个页面含有100个模块
url = "https://fuel.gazebosim.org/1.0/models?page=1&per_page=100"# 发送请求并获取响应
response = requests.get(url)# 解析 JSON 数据
data = response.json()# 创建一个空数组来存储格式化后的 URL
formatted_urls = []# 遍历每个元素,提取 name 和 owner,并格式化 URL
for item in data:name = item.get('name', '')name = quote(name)owner = item.get('owner', '')owner = quote(owner)formatted_url = f"https://app.gazebosim.org/{owner}/fuel/models/{name}"formatted_urls.append(formatted_url)# 打印结果
for url in formatted_urls:print(url)#模拟下载
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
# 配置 Chrome 以自动处理下载
options = Options()
prefs = {"download.default_directory" : "D:\\Code\\models13","download.prompt_for_download": False,"download.directory_upgrade": True}
options.add_experimental_option("prefs", prefs)# 初始化 WebDriver
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
# 设置显式等待
wait = WebDriverWait(driver, 10)  # 最多等待10秒# 遍历 URL 列表
#for url in formatted_urls:
#    driver.get(url)
# 循环打开新标签页并加载URL
i = 0
for url in formatted_urls:# 执行JavaScript来在当前窗口中打开新标签页driver.execute_script('window.open()')# 切换到新打开的标签页driver.switch_to.window(driver.window_handles[-1])# 加载URL到新标签页driver.get(url)# time.sleep(5)  # 例如等待 10 秒# 找到下载按钮并点击# 等待下载按钮出现并可点击download_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[title='Download this model']")))# 点击下载按钮download_button.click()# 这里你可以添加适当的延时等待下载完成# 在控制台输出正在下载的文件信息print(f"正在下载:{url}")i+= 1print(i)# 等待下载完成或者加入适当的延时# time.sleep(10)  # 例如等待 10 秒
# 关闭浏览器
#driver.quit()
inp=input("按回车键结束程序! ")

运行效果

脚本运行,数据集自行下载到指定文件夹
在这里插入图片描述
已经显示访问了100个模块的所有界面了
在这里插入图片描述

但需要等所有100个模块数据集下载完成才可结束程序,不然有的数据集还没下载完成。
在这里插入图片描述
已经显示100个模块的数据集已经全部下载完成,这时可以进行结束程序。
在这里插入图片描述
接下来,可以进行下载第二页的100个模块的数据集,只需要修改代码中的page=2即可,随后几页的数据集以此类推即可完成全部的下载。
在这里插入图片描述

这篇关于编写脚本下载gazebo仿真器公开的模型数据集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629751

相关文章

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

MyBatisPlus如何优化千万级数据的CRUD

《MyBatisPlus如何优化千万级数据的CRUD》最近负责的一个项目,数据库表量级破千万,每次执行CRUD都像走钢丝,稍有不慎就引起数据库报警,本文就结合这个项目的实战经验,聊聊MyBatisPl... 目录背景一、MyBATis Plus 简介二、千万级数据的挑战三、优化 CRUD 的关键策略1. 查

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

mysql中的数据目录用法及说明

《mysql中的数据目录用法及说明》:本文主要介绍mysql中的数据目录用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、版本3、数据目录4、总结1、背景安装mysql之后,在安装目录下会有一个data目录,我们创建的数据库、创建的表、插入的