Vous pouvez utiliser une expression régulière pour analyser l'URL de la InnerHtml de votre CuboPlayer1
div. Pourquoi le parent div et pas la couverture elle-même? Parce qu'il y a un problème avec le HtmlAgilityPack où il ne peut pas analyser les guillemets à l'intérieur de Attributes["style"].Value
, c'est pourquoi vous devez aller au nœud parent CuboPlayer1
et extraire manuellement l'URL de tout le HTML à la place.
Vous pouvez le faire avec ce code:
string nodeHTML = resultat.DocumentNode
.SelectSingleNode("//div[@id='CuboPlayer1']").InnerHtml;
string pattern = @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\/\\\+&%\$#_]*)?";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
string backgroundURL = regex.Match(nodeHTML).Value;
J'ai testé cela en utilisant le code ci-dessous et cela fonctionne:
using System;
using System.Text.RegularExpressions;
using System.Xml;
using HtmlAgilityPack;
public class Program
{
public static void Main()
{
var html =
"<div id=\"CuboPlayer1\"><div class=\"cover\" style=\"background-image: url(\"http://is5.mzstatic.com/image/thumb/Music/v4/68/b5/08/68b50896-607e-2950-3530-de172fdbf878/source/100x100bb.jpg\");\"></div></div>";
var htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(html);
string nodeHTML = htmlDoc.DocumentNode
.SelectSingleNode("//div[@id='CuboPlayer1']").InnerHtml;
string pattern = @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\/\\\+&%\$#_]*)?";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
string backgroundURL = regex.Match(nodeHTML).Value;
Console.WriteLine(backgroundURL);
}
}
EDIT: Il y a un problème avec ce que vous essayez pour atteindre, en ce que l'image de fond est en constante évolution. En fonction de ce qui apparaît à l'écran au moment du chargement du document, il se peut que vous ne récupériez aucune URL car aucune couverture n'est affichée.
Dans tous les cas, le code est mis à jour ici qui pointe directement à la page que vous travaillez avec l'aide de votre URL au lieu de HTML statique comme mon premier exemple:
var url = "http://www.antena1.com.br/stream/player";
var web = new HtmlWeb();
var htmlDoc = web.Load(url);
// Convert each line of HTML into a list of strings
List<string> nodeHTML = htmlDoc.DocumentNode
.SelectSingleNode("//div[@id='CuboPlayer1']").InnerHtml.Split('\n').ToList();
// Find div with "cover" attribute
string coverHTML = nodeHTML.Where(n => n.Contains("<div class=\"cover\"")).FirstOrDefault();
// Define regular expression to match
string pattern = @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\/\\\+&%\$#_]*)?";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
// Extract backgroundURL
string backgroundURL = regex.Match(coverHTML).Value;
Où se trouve 'CuboPlayer1' dans ce qui précède' div 'élément? Est-ce parent? – SomeDude
div dont j'ai besoin est à l'intérieur de CuboPlayer1 div. – Toni0123