我想写一些可以返回youtube链接视频时长的内容。所以我找到了requests
和lxml
,并开始关注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]')
当我为标题做同样的事情时,它再次起作用。
发生了什么事?
答案 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