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

时间:2017-02-09 15:13:16

标签: python xpath lxml

我想写一些可以返回youtube链接视频时长的内容。所以我找到了requestslxml,并开始关注this指南。

以下是设置:

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()')

它有效。当我使用inspect来复制duration元素的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]')

当我为标题做同样的事情时,它再次起作用。

发生了什么事?

2 个答案:

答案 0 :(得分:1)

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

span标记由JavaScript生成,requests不会返回,requests只返回HTML代码

答案 1 :(得分:0)

对于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