2017-02-09 84 views
1

我想写一些东西,它会返回YouTube视频链接的视频持续时间。所以我找到了requestslxml,并开始遵循this指南。未能获得使用xpath的YouTube视频的持续时间

这里的设置:

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

当我做标题的相同的再次工作。

这是怎么回事?

+0

一种解决方案可能是一个无头的浏览器的WebKit或类似PhantomJS - 可以执行JS。 –

回答

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

是由JavaScript生成此span标签,并且它不会被requests返回,requests只返回HTML代码

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您的问题

相关问题