2010-06-05 6 views
2

ce simple morceau Tenir compte de code:aide HTMLAgility pack pour extraire les liens

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using HtmlAgilityPack; 

namespace WebScraper 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml("http://www.google.com"); 

      foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) 
      { 
      } 
     } 
    } 
} 

Cela ne marche pas effectivement faire quoi que ce soit, et est copié/inspiré de diverses autres questions comme StackOverflow this. Lors de la compilation de ceci, il y a une erreur d'exécution qui indique "La référence d'objet n'est pas définie sur une instance d'un objet". mettant en évidence la ligne foreach.

Je ne comprends pas, pourquoi l'environnement est devenu irritable pour ce morceau de code humble, innocent et inutile.

J'aimerais aussi savoir, HTMLAgilityPack accepte-t-il les classes HTML comme nœuds?

Répondre

4

Si vous voulez charger html à partir du Web, vous devez utiliser l'objet HtmlWeb:

HtmlWeb web = new HtmlWeb(); 
HtmlDocument doc =web.Load(url); 
+0

thnks le problème a été résolu! – Soham

1

LoadHtml prend une chaîne de HTML réel en tant qu'argument. Vous pouvez passer Load a Stream à partir de WebResponse.GetResponseStream() à la place.

WebRequest req = WebRequest.Create("http://www.google.com"); 
Stream s = req.GetResponse().GetResponseStream(); 
doc.Load(s); 
+0

Merci. Je n'ai pas prévu cela. – Soham