2017-06-14 5 views
2

Ich möchte eine Konsolenanwendung erstellen, die angibt, wie viele Abonnenten sie haben, wenn ich ihren Kanal eintippe. Ich lade es gerade die Suchseite als html von der Console.ReadLine() herunter. Dies gibt eine HTML-Seite erfolgreich zurück, wenn ich eine .Save-Datei hinzufüge, um zu sehen, ob der Download eine Ausgabe hat. Wenn Sie jedoch den HTML-Code mit xcode scrappen, wird null zurückgegeben. Ich habe schon oft versucht, mit der Google Chrome-Kopie xcode zu verwenden, hatte aber kein Glück.C# & HTML Agility Pack - Rückgabe Null

Hier ist der Code, den ich bisher habe:

public static void GetYoutubeSubscriptions2() 
    { 
     string url = "https://www.youtube.com/results?search_query=" + Regex.Replace(Console.ReadLine(), @"\s+", "+"); 

     Console.WriteLine(url); 

     HtmlWeb web = new HtmlWeb(); 
     HtmlDocument document = web.Load(url); 
     //document.Save(path1); 

     var htmlNodes = document.DocumentNode.SelectNodes(@"//*[@id=""section - list - 231763""]/li[3]/div/div[2]/div[3]/span/span[1]"); 

     foreach (var node in htmlNodes) 
     { 
      Console.WriteLine(node.InnerText); 
     } 

     Console.ReadLine(); 
    } 

Jede Hilfe Anregungen geschätzt wird! :)

Antwort

0

Dies ist, was Sie brauchen:

var htmlNodes = document.DocumentNode.Descendants("span").FirstOrDefault(_ => _.HasClass("yt-subscriber-count")); 

Dies ist der HasClass extenstion

public static bool HasClass(this HtmlNode node, params string[] classValueArray) 
{ 
     var classValue = node.GetAttributeValue("class", ""); 
     var classValues = classValue.Split(' '); 
     return classValueArray.All(c => classValues.Contains(c)); 
} 
+0

Danke für die Antwort! Für alle anderen, die diese Lösung verwenden, stellen Sie sicher, dass Sie die HasClass in eine statische Klasse stellen! –

Verwandte Themen