2017-02-09 124 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您的問題

相關問題