使用Python+Selenium爬取YT内容,PyCharm控制台无输出求助
解决YouTube频道视频信息爬取无输出问题
问题原因分析
- 元素定位错误:你用
By.CLASS_NAME定位的style-scope ytd-rich-grid-renderer是页面容器的通用类,不是单个视频卡片的标识,导致videos列表为空,循环根本没执行。 - XPATH未使用相对定位:代码里的XPATH是全局路径,没有相对于当前
video元素查找,就算找到元素也会重复取第一个结果,而且容易定位失败。 - 缺少页面加载等待:YouTube是动态加载页面,直接执行查找元素的代码时,视频元素还没渲染完成,返回空列表。
- 语法小问题:
title和views变量后面多了逗号,会让变量变成元组类型,虽然不报错但不符合预期。
修正后的代码
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.Edge() driver.get("https://www.youtube.com/@CorporateMusician") driver.maximize_window() # 等待视频卡片加载完成,最多等10秒 wait = WebDriverWait(driver, 10) videos = wait.until(EC.presence_of_all_elements_located((By.TAG_NAME, 'ytd-rich-item-renderer'))) for video in videos: # 使用相对XPATH定位当前视频内的元素 title = video.find_element(By.XPATH, './/*[@id="video-title"]').text views = video.find_element(By.XPATH, './/*[@id="metadata-line"]/span[1]').text posted = video.find_element(By.XPATH, './/*[@id="metadata-line"]/span[2]').text print(f"标题: {title}\n播放量: {views}\n发布时间: {posted}\n---") driver.quit()
关键修改说明
- 添加显式等待:用
WebDriverWait等待视频元素加载完成,避免因页面未渲染导致的空列表。 - 修正视频卡片定位:用
ytd-rich-item-renderer标签定位单个视频卡片,这是YouTube视频项的标准标签。 - 相对路径XPATH:在XPATH前加
.,表示相对于当前video元素查找子元素,确保每个视频的信息对应正确。 - 移除多余逗号:修正变量定义后的逗号,避免生成不必要的元组。
内容的提问来源于stack exchange,提问作者Sumanto
相关产品推荐
相关产品推荐

