Python Selenium爬取YouTube视频标题遇NoSuchElementException求助
YouTube视频标题爬取问题解决方法
问题根源
你用name="style-scope ytd-rich-grid-media"定位元素根本不靠谱——这个属性是YouTube给大量元素加的通用标识,不是视频标题独有的,自然找不到目标元素。另外time.sleep(10)是固定等待,没法保证页面刚好渲染完标题,大概率还是会扑空。
修复方案
1. 换精准的定位器
直接定位视频标题的专属元素,比如用XPATH定位标题链接://ytd-rich-grid-media//a[@id='video-title'],或者用CSS选择器ytd-rich-grid-media #video-title,这俩都是直接指向标题元素的。
2. 用显式等待替代固定sleep
显式等待会等到目标元素出现/可见才继续执行,比硬等10秒靠谱得多,能适配不同网络速度。
修改后的代码示例
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 # 初始化浏览器 driver = webdriver.Chrome() driver.get("https://www.youtube.com/@JohnWatsonRooney/videos") # 最多等20秒,直到所有标题元素可见 wait = WebDriverWait(driver, 20) video_titles = wait.until(EC.visibility_of_all_elements_located((By.XPATH, "//ytd-rich-grid-media//a[@id='video-title']"))) # 打印所有标题 for idx, title in enumerate(video_titles, 1): print(f"{idx}. {title.text}") driver.quit()
后续比价程序建议
- 不同电商网站的元素结构差异大,每个网站要单独写精准的定位器(比如价格、商品名、链接的选择器)
- 统一用显式等待处理页面加载,避免定位失败
- 提前处理反爬:设置浏览器UA、保存Cookie、必要时用代理
- 把爬取逻辑封装成函数,每个网站对应一个爬取函数,最后收集所有商品数据后做价格排序,输出最低价链接、商品排名和名称
内容的提问来源于stack exchange,提问作者Charles Perry
相关产品推荐
相关产品推荐

