使用Python Selenium和BeautifulSoup无法爬取video内嵌套source标签的src属性
问题根源及修复方案
核心错误点
- 执行顺序错误:在点击播放按钮触发视频加载之前,就已经用BeautifulSoup解析了当前页面源码,此时video标签下的source标签还没有生成src属性值
- 元素定位错误:直接查找video标签的src,但实际视频地址嵌套在video的子元素
source标签的src属性中 - 语法错误:
driver.stop_client、driver.close、driver.quit都是方法,需要加()才会执行,原有写法根本不会关闭浏览器进程 - 缩进错误:代码多处缩进不符合Python规范,会直接触发语法错误
修复后代码
from selenium import webdriver from bs4 import BeautifulSoup from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 目标地址 url = "https://bestdubbedanime.com/Demon-Slayer-Kimetsu-no-Yaiba/26" # 启动Firefox驱动 driver = webdriver.Firefox() driver.get(url) # 等待播放按钮可点击后点击,触发视频加载 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".playostki"))).click() # 等待video标签下的source标签加载完成,再解析页面 WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "video#my_video_1_html5_api source"))) soup1 = BeautifulSoup(driver.page_source, 'html.parser') # 定位source标签提取src source_tag = soup1.find('video', id='my_video_1_html5_api').find('source') video_src = source_tag.get('src') print("提取到的视频地址:", video_src) # 正确关闭驱动 driver.stop_client() driver.close() driver.quit()
补充说明
如果提取到的src是相对路径,自行拼接站点域名即可得到完整可访问的视频地址。部分站点会做视频地址的动态签名校验,直接访问可能存在有效期限制。
内容的提问来源于stack exchange,提问作者Abhinav
相关产品推荐
相关产品推荐

