无法获取YouTube视频播放量与发布日期的技术求助
基于Selenium获取YouTube视频播放量与精确发布日期
核心定位方法(适配当前YouTube页面结构)
YouTube页面结构频繁更新,改用data-testid属性定位元素更稳定,以下是针对目标字段的定位逻辑:
1. 获取播放量
当前播放量元素的data-testid为view-count,直接提取元素文本后可清洗为纯数字格式:
from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def get_video_views(driver, url): driver.get(url) # 等待播放量元素加载完成 view_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, '[data-testid="view-count"]')) ) view_text = view_element.text # 清洗播放量为纯数字(处理"123,456 次观看"这类格式) clean_views = int(''.join(filter(str.isdigit, view_text))) return view_text, clean_views
2. 获取精确发布日期
视频下方的相对发布时间(如"2年前"),其元素的title属性存储了精确日期,无需点击弹窗,直接提取该属性即可:
def get_video_publish_date(driver): # 定位发布时间元素 date_element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, '[data-testid="publish-date"]')) ) # 提取精确日期(title属性存储完整日期) publish_date = date_element.get_attribute('title') return publish_date
批量更新DataFrame字段
结合上述函数,遍历DataFrame批量更新对应字段:
import pandas as pd import time import random # 假设你的DataFrame名为df for idx, row in df.iterrows(): video_url = row['video_url'] try: views, clean_views = get_video_views(driver, video_url) publish_date = get_video_publish_date(driver) # 更新DataFrame字段 df.at[idx, 'views'] = views df.at[idx, 'clean_views'] = clean_views df.at[idx, 'video_age'] = publish_date # 替换原相对时间为精确日期 # 随机延迟,避免触发反爬机制 time.sleep(random.uniform(2, 5)) except Exception as e: print(f"处理视频 {video_url} 出错: {str(e)}") continue # 保存更新后的DataFrame df.to_csv('updated_youtube_videos.csv', index=False)
关键注意事项
- 必须使用
WebDriverWait等待元素加载,避免因页面渲染不完全导致元素定位失败; - 加入随机延迟,搭配无头模式时建议配置自定义
user-agent,降低反爬拦截概率; - 若元素定位失败,可通过浏览器开发者工具(F12)重新查看当前页面元素属性,更新CSS选择器。
内容的提问来源于stack exchange,提问作者Rango00
相关产品推荐
相关产品推荐

