comment utiliser le pack d'agilité html pour extraire toutes les URL du texte html

c# html-agility-pack

Question

Souvent, j'extrais des noms de fichiers à partir de données texte HTML à l'aide de regex, mais j'ai entendu dire que le pack d'agilité html était bon pour l'analyse de données HTML. comment puis-je utiliser le pack d'agilité HTML pour extraire toutes les URL à partir de données HTML. Quelqu'un peut-il me guider avec un exemple de code? Merci.

Ceci est mon exemple de code qui fonctionne bien.

using System.Text.RegularExpressions;

private ArrayList GetFilesName(string Source)
{
    ArrayList arrayList = new ArrayList();
    Regex regex = new Regex("(?<=src=\")([^\"]+)(?=\")", 1);
    MatchCollection matchCollection = regex.Matches(Source);
    foreach (Match match in matchCollection)
    {
        if (!match.get_Value().StartsWith("http://"))
        {
                    arrayList.Add(Path.GetFileName(match.get_Value()));
                }
                match.NextMatch();
            }
            ArrayList arrayList1 = arrayList;
            return arrayList1;
        }

private string ReplaceSrc(string Source)
{
    Regex regex = new Regex("(?<=src=\")([^\"]+)(?=\")", 1);
    MatchCollection matchCollection = regex.Matches(Source);
    foreach (Match match in matchCollection)
    {
        string value = match.get_Value();
        string str = string.Concat("images/", Path.GetFileName(value));
        Source = Source.Replace(value, str);
        match.NextMatch();
    }
    string source = Source;
    return source;
}

Réponse acceptée

Sélectionnez toutes les balises img avec un attribut src non vide (sinon, vous obtiendrez une exception NullReferenceException lors de l'obtention de la valeur d'attribut):

HtmlDocument html = new HtmlDocument();
html.Load(path_to_file);
var urls = html.DocumentNode.SelectNodes("//img[@src!='']")
               .Select(i => i.Attributes["src"].Value);

Réponse populaire

Quelque chose comme:

var doc = new HtmlDocument();
doc.LoadHtml(html);

var images = doc.DocumentNode.Descendants("img")
    .Where(i => i.GetAttributeValue("src", null) != null)
    .Select(i => i.Attributes["src"].Value);

Ceci sélectionne tous les éléments <img> du document ayant la propriété src définie et renvoie ces URL.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow