2014-07-10 3 views
1

J'exécute le code suivant pour extraire tous les liens de la page en utilisant htmlagilitypack. Quand j'entre l'URL https://htmlagilitypack.codeplex.com/ je n'obtiens aucune erreur et le code fonctionne bien. Les URL sont également extraites et bien affichées. Mais si j'entre une autre URL comme https://htmlagilitypack.codeplex.com/discussions/12447, j'obtiens l'erreur suivante "Référence d'objet non définie sur une instance d'un objet". Je reçois l'erreur dans cette lignehtmlagilitypack extraction des emails

OutputLabel.Text += counter + ". " + aTag.InnerHtml + " - " + 
        aTag.Attributes["href"].Value + "\t" + "<br />"; 

S'il vous plaît aidez-moi. Il peut être une erreur mineure pour vous mais s'il vous plaît ne le marque pas négatif.

var getHtmlWeb = new HtmlWeb(); 
var document = getHtmlWeb.Load(InputTextBox.Text); 
var aTags = document.DocumentNode.SelectNodes("//a"); 
int counter = 1; 

if (aTags != null) 
{ 
    foreach (var aTag in aTags) 
    { 
     OutputLabel.Text += counter + ". " + aTag.InnerHtml + " - " + 
          aTag.Attributes["href"].Value + "\t" + "<br />"; 
     counter++; 
    } 
} 
+0

Êtes-vous obtenir l'erreur de référence d'objet sur cette ligne: 'document var = getHtmlWeb.Load (InputTextBox.Text);' – MDiesel

+0

Je reçois une erreur dans aTag.Attributes ["href"]. Valeur – user3783579

Répondre

4

On dirait que certains des points d'ancrage n'a pas href attribut. Par exemple. en page donnée, il est l'ancre:

<a name="post40566"></a> 

Ainsi, aTag.Attributes["href"] retours null et vous avez une exception lorsque vous essayez d'obtenir cette valeur d'attribut. Vous pouvez modifier XPath pour sélectionner uniquement les points d'ancrage qui ont cet attribut:

document.DocumentNode.SelectNodes("//a[@href]"); 

Ou vérifier si un attribut existe avant d'accéder à sa valeur:

if (aTag.Attributes["href"] != null) 
    // ... 

La troisième option est l'utilisation de GetAttributeValue méthode et fournir une valeur par défaut qui serait affiché pour les attributs manquants:

aTag.GetAttributeValue("href", "N/A") 
+1

Merci beaucoup. Je cherchais depuis deux heures sur internet. Ça fonctionne bien. Pouvez-vous s'il vous plaît m'aider dans un autre problème. Si je veux ignorer les URL des images, que dois-je ajouter dans le code – user3783579

+0

@ user3783579 en fait c'est une autre question. Si le problème actuel est résolu, vous devez accepter la solution, et si vous avez un autre problème, créez une nouvelle question. Voici un indice pour votre prochain problème - obtenez la valeur 'href' et vérifiez l'extension du lien –