问题描述
我想写一些可以返回 YouTube 链接的视频时长的东西。
所以我找到了requests
和lxml
并开始遵循指南。
这是设置:
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]')
当我对标题做同样的事情时,它又可以工作了。
到底是怎么回事?
1楼
span[@class="ytp-time-duration"]
这个span
标签是由JavaScript生成的,它不会被requests
返回, requests
只返回HTML代码
2楼
对于 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