0


用自动化工具selenium批量获取油管播放列表内视频的url

用自动化工具selenium批量获取油管播放列表内视频的url

今天突发奇想想下载一些古早哆啦A梦的视频,看了一下B站上没有我满意的形式,所以上油管看了一下:

不错不错,配合我的油管视频解析网站可以直接下载到本地

唯一的问题就是:一个一个复制链接太麻烦了!!!

如果有一个工具可以批量复制列表内的视频链接就好了,正好现在在学Python,此时不用何时用?

简单百度了一下,我把目光放在了自动化操作浏览器的工具Selenium上,开源、支持python、模拟操作用户行为,是一款很不错的工具。

首先就是selenium库的安装

pip install selenium

我这里用的是Chrome浏览器,所以在这里下载Chrome浏览器的驱动,其他浏览器可以自行在网上查找,注意下载对应本浏览器版本的驱动。

然后导入库:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

我们的核心任务就是使用selenium获取视频url:

defget_playlist_video_urls(playlist_url):...return video_urls

输入视频列表的url,输出存放所以视频url的列表

编写函数内容:

  1. 设置浏览器的驱动路径driver_path =r'在这里输入你的驱动存放路径'
  2. 初始化:service = webdriver.ChromeService()driver = webdriver.Chrome(service=service)service = webdriver.ChromeService(executable_path=driver_path)
  3. 打开播放列表页面,等待加载,这里等待时间根据网络和电脑性能调整:driver.get(playlist_url)time.sleep(5)
  4. 模拟滚动,加载所有视频:last_height = driver.execute_script("return document.documentElement.scrollHeight")whileTrue: driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);") time.sleep(2) new_height = driver.execute_script("return document.documentElement.scrollHeight")if new_height == last_height:break last_height = new_height
  5. 获取所有链接:video_links = driver.find_elements(by=By.XPATH,value='//*[@id="video-title"]')video_urls =[link.get_attribute('href')for link in video_links] 这里介绍一下find_elements方法:deffind_elements(self, by=By.ID, value: Optional[str]=None)-> List[WebElement]: 主要有两个参数,一个是by,一个是value``````by参数有八种值:classBy:"""Set of supported locator strategies."""ID ="id"XPATH ="xpath"LINK_TEXT ="link text"PARTIAL_LINK_TEXT ="partial link text"NAME ="name"TAG_NAME ="tag name"CLASS_NAME ="class name"CSS_SELECTOR ="css selector" 通过目标的idXPATH等参数来搜索,具体介绍参考这篇博客,我们这里使用了XPATH搜索,'value'具体语法参考另一篇博客

这下这个函数的基本结构就完成了,只需要编写主函数即可:

# 替换成要获取的播放列表的URL
playlist_url ='URL'# 获取播放列表中所有视频的URL
video_urls = get_playlist_video_urls(playlist_url)# 打印所有视频的URLfor url in video_urls:print(url)

这下就可以完美输出啦


附:

完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

defget_playlist_video_urls(playlist_url):# 设置Chrome浏览器的驱动路径
    driver_path =r''# 初始化
    service = webdriver.ChromeService()
    driver = webdriver.Chrome(service=service)
    service = webdriver.ChromeService(executable_path=driver_path)# 打开播放列表页面,等待页面加载
    driver.get(playlist_url)
    time.sleep(5)# 模拟滚动以加载所有视频
    last_height = driver.execute_script("return document.documentElement.scrollHeight")whileTrue:
        driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
        time.sleep(2)
        new_height = driver.execute_script("return document.documentElement.scrollHeight")if new_height == last_height:break
        last_height = new_height

    # 获取所有视频链接
    video_links = driver.find_elements(by=By.XPATH,value='//*[@id="video-title"]')
    video_urls =[link.get_attribute('href')for link in video_links]# 关闭浏览器
    driver.quit()return video_urls

if __name__ =="__main__":# 替换成您要获取的播放列表的URL
    playlist_url ='URL'# 获取播放列表中所有视频的URL
    video_urls = get_playlist_video_urls(playlist_url)# 打印所有视频的URLfor url in video_urls:print(url)

本文转载自: https://blog.csdn.net/2201_76050457/article/details/134936642
版权归原作者 HIT-Zxy 所有, 如有侵权,请联系我们删除。

“用自动化工具selenium批量获取油管播放列表内视频的url”的评论:

还没有评论