当前位置: 代码迷 >> python >> 无法使用 xpath 获取 youtube 视频的持续时间
  详细解决方案

无法使用 xpath 获取 youtube 视频的持续时间

热度:113   发布时间:2023-06-13 14:51:11.0

我想写一些可以返回 YouTube 链接的视频时长的东西。 所以我找到了requestslxml并开始遵循指南。

这是设置:

import requests
from lxml import html

url = 'https://www.youtube.com/watch?v=EN8fNb6uhns'
page = requests.get(url)
tree = html.fromstring(page.content)

然后我尝试使用 xpath 来获取持续时间,但它不起作用。 试图获得持续时间:

tree.xpath('//span[@class="ytp-time-duration"]/text()')

返回一个空列表。 但是当我尝试通过以下方式获得标题(作为测试)时:

tree.xpath('//h1[@class="watch-title-container"]/span/text()')

有用。 当我使用检查复制持续时间元素的 xpath 时,没有返回任何内容:

tree.xpath('/html/body/div[2]/div[4]/div/div[4]/div[2]/div[2]/div/div[24]/div[2]/div[1]/div/span[3]')

当我对标题做同样的事情时,它又可以工作了。

到底是怎么回事?

span[@class="ytp-time-duration"]

这个span标签是由JavaScript生成的,它不会被requests返回, requests只返回HTML代码

对于 YouTube,Xpath 并不一致。 我有两个不同的 Xpath(这些是我为捕获视频持续时间而获得的 2 个 Xpath)

//*[@id='movie_player']/div[5]/div/div/div[5]/button/div[1]

//*[@id="movie_player"]/div[26]/div[2]/div[1]/div/span[3]

尝试了按类名查找元素的选项

FindElement(By.ClassName("ytp-time-duration"))

这一直有效。

string VideoDuration = firfxdrivr.FindElement(By.ClassName("ytp-time-duration")).GetAttribute("textContent");

Console.WriteLine(VideoDuration);

输出:19:18