You need to enable JavaScript to run this app. 如何使用Python和Selenium提取YouTube首页的全部视频URL
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python和Selenium提取YouTube首页的全部视频URL

解决方案

1. 正确的元素定位规则

YouTube首页推荐视频的跳转链接统一存放在ytd-thumbnail组件下的ID为thumbnail的a标签内,使用XPATH //ytd-thumbnail/a[@id="thumbnail"]即可匹配到所有已加载的推荐视频链接元素。
该元素的href属性为视频相对路径,格式为/watch?v=视频ID,直接提取v参数的值即可得到你需要的视频ID,拼接https://www.youtube.com前缀即可得到完整视频链接。

2. 代码优化修正

你原有代码返回空值的核心原因是缺少页面加载等待逻辑、定位路径错误,同时YouTube首页为滚动加载模式,需要补充滚动逻辑才能拿到更多推荐内容,修正后的参考代码如下:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

driver = webdriver.Chrome('./chromedriver/chromedriver')
driver.get("https://www.youtube.com")
# 存储已采集的链接,去重
collected_links = set()

while True:
    # 等待元素加载完成
    WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.XPATH, '//ytd-thumbnail/a[@id="thumbnail"]'))
    )
    elements = driver.find_elements(By.XPATH, '//ytd-thumbnail/a[@id="thumbnail"]')
    for ele in elements:
        href = ele.get_attribute('href')
        if href and '/watch?v=' in href and href not in collected_links:
            collected_links.add(href)
            # 提取视频ID的话可以用下面的代码
            video_id = href.split('v=')[-1].split('&')[0]
            print(f"获取到视频链接:{href},视频ID:{video_id}")
    # 滚动到页面底部加载更多内容
    driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    # 等待新内容加载
    time.sleep(2)
    # 可以自行加终止条件,比如采集到指定数量就break

注意事项

  • 如果使用高版本selenium,find_elements_by_xpath方法已废弃,推荐使用find_elements(By.XPATH, 路径)的写法
  • 可以根据自己的需求设置循环终止条件,避免无限滚动

内容的提问来源于stack exchange,提问作者ZeroMaxinumXZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 15:06:07