2009-08-11 10 views
-5

je veux télécharger toutes les images stockées dans (page web) html, je ne sais pas combien l'image sera télécharger, et je'en veux utiliser « HTML AGILITY PACK »C# trouver l'image en html et télécharger les

je recherche dans google, mais tout le site me faire plus confus,

j'ai essayé regex mais un seul résultat ...,

+4

Peut-être vous devriez expliquer _why_ vous ne voulez pas utiliser HtmlAgiliyPack. –

+0

je ne peux pas l'utilisateur htmlagilitypack pas de manuel, tut, rien, alors pourquoi j'utiliser quelque chose sans aucun tut? – madman

+3

http: // stackoverflow.com/questions/846994/how-to-use-html-agility-pack –

Répondre

2

en termes généraux

  1. Vous devez chercher la page html
  2. Rechercher des balises img et en extraire la partie src = "..."
  3. Conservez une liste de toutes ces URL d'image extraites.
  4. Téléchargez-les un par un.

Peut-être que cette question à propos de C# HTML parser va vous aider, un peu ...

+0

merci pour ALGORITHM, et je ne veux pas utiliser html agility pack :) – madman

4

Vous pouvez utiliser un contrôle WebBrowser et extraire le code HTML de cet exemple.

System.Windows.Forms.WebBrowser objWebBrowser = new System.Windows.Forms.WebBrowser(); 
objWebBrowser.Navigate(new Uri("your url of html document")); 
System.Windows.Forms.HtmlDocument objDoc = objWebBrowser.Document; 
System.Windows.Forms.HtmlElementCollection aColl = objDoc.All.GetElementsByName("IMG"); 
... 

ou appeler directement la famille IHTMLDocument des interfaces COM

5

d'abord tout ce que je ne peux pas laisser cette seule phrase:

images stockées en html

Ce phrase est probablement une grande partie de la raison pour laquelle votre question a été rejetée deux fois. Les images sont et non stockées en html. Les pages HTML ont des références aux images que les navigateurs Web téléchargent séparément. Cela signifie que vous devez le faire en trois étapes: d'abord télécharger le code HTML, puis trouver les références d'image dans le fichier html, et enfin utiliser ces références pour télécharger les images elles-mêmes. Pour ce faire, consultez la classe System.Net.WebClient(). Il a une méthode .DownloadString() que vous pouvez utiliser pour obtenir le code HTML. Ensuite, vous devez trouver tous les tags <img />. Vous possédez votre propre ici, mais c'est assez simple. Enfin, vous utilisez les méthodes .DownloadData() ou DownloadFile() de WebClient pour récupérer les images.

+1

qu'en est-il des données: image/png; base64? – madman

14

Les gens vous donnent la bonne réponse - vous ne pouvez pas être difficile et paresseux, aussi. ;-)

Si vous utilisez une solution semi-cuite, vous devrez gérer beaucoup de cas de bords. Voici un exemple de travail qui obtient tous les liens dans un document HTML en utilisant HTML Agility Pack (il est inclus dans le téléchargement HTML Agility Pack).

Et voici un message de blog qui montre comment grab all images in an HTML document with HTML Agility Pack and LINQ

// Bing Image Result for Cat, First Page 
    string url = "http://www.bing.com/images/search?q=cat&go=&form=QB&qs=n"; 

    // For speed of dev, I use a WebClient 
    WebClient client = new WebClient(); 
    string html = client.DownloadString(url); 

    // Load the Html into the agility pack 
    HtmlDocument doc = new HtmlDocument(); 
    doc.LoadHtml(html); 

    // Now, using LINQ to get all Images 
    List<HtmlNode> imageNodes = null; 
    imageNodes = (from HtmlNode node in doc.DocumentNode.SelectNodes("//img") 
        where node.Name == "img" 
        && node.Attributes["class"] != null 
        && node.Attributes["class"].Value.StartsWith("img_") 
        select node).ToList(); 

    foreach(HtmlNode node in imageNodes) 
    { 
     Console.WriteLine(node.Attributes["src"].Value); 
    } 
+0

si vous pensez que je suis paresseux, venez ici et voir combien d'onglets en ce moment ouvert :) – madman

+4

Oh non !! Mais mais cela utilise HTML Agility Pack ... Les lunettes! Ils ne font rien! –

+0

Lazy = publication de la question sur StackOverflow. La paresse est bonne! J'ai déjà fait ce genre de chose et je l'ai regretté. HTML Agility Pack traite des problèmes d'encodage bizarres, HTML malformé, etc. Si le HTML est sous votre contrôle et que vous savez qu'il ne changera pas, vous pouvez vous débrouiller avec une solution personnalisée; sinon, tirer parti de ce que les autres ont fait! –

Questions connexes