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

本文介绍了一个Python脚本,利用Selenium库模拟点击行为,从Gazebo官网下载公开模型数据集。脚本通过抓取每个模型的名称和所有者信息,格式化URL并实现逐页下载功能。
摘要由CSDN通过智能技术生成

问题描述

编写脚本把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+= 1
    print(i)
    # 等待下载完成或者加入适当的延时
    # time.sleep(10)  # 例如等待 10 秒
# 关闭浏览器
#driver.quit()
inp=input("按回车键结束程序! ")

运行效果

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

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

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稚皓君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值