2017-02-09 4 views
1

abgerufen werden. Ich wollte etwas schreiben, das mir die Videodauer eines Youtube-Links zurückgibt. So fand ich requests und lxml und begann nach Guide.Die Dauer des Youtube-Videos konnte nicht mit xpath

Hier ist das Setup:

import requests 
from lxml import html 

url = 'https://www.youtube.com/watch?v=EN8fNb6uhns' 
page = requests.get(url) 
tree = html.fromstring(page.content) 

Dann versuche ich, und verwenden XPath die Dauer zu erhalten, aber es funktioniert nicht. Versuchen, die Dauer zu erhalten:

tree.xpath('//span[@class="ytp-time-duration"]/text()') 

gibt eine leere Liste zurück. Aber wenn ich versuche, und bekommen den Titel (als Test) mit:

tree.xpath('//h1[@class="watch-title-container"]/span/text()') 

es funktioniert. Wenn ich inspizieren verwenden, um die XPath der Dauer Element nichts zu kopieren zurückgegeben:

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

Wenn ich das Gleiche tun für den Titel wieder funktioniert.

Was ist los?

+0

Eine Lösung für Ihr Problem eine Maden Browser oder webkit wie PhantomJS sein könnte - die JS ausführen kann. –

Antwort

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

dieses span Tag durch JavaScript erzeugt wird, und es wird von requests, nicht zurückgegeben requests zurückkehren nur den HTML-Code

0

Für YouTube die Xpath nicht übereinstimmte. bekam ich zwei verschiedene XPaths (das sind die 2 XPaths ich für die Erfassung der Video Duration bekam)

//*[@id='movie_player']/div[5]/div/div/div[5]/button/div[1] 

//*[@id="movie_player"]/div[26]/div[2]/div[1]/div/span[3] 

die Option Versucht das Element von Klassenname

FindElement(By.ClassName("ytp-time-duration")) 

Das funktionierte immer zu finden.

string VideoDuration = firfxdrivr.FindElement(By.ClassName("ytp-time-duration")).GetAttribute("textContent"); 

Console.WriteLine(VideoDuration); 

Ausgang: 19:18

Verwandte Themen