C # HTML Agility Pack Nœud à sélection unique avec valeur null

c# html-agility-pack web-scraping winforms

Question

J'ai un scraper Web développé à l'aide de C #, de Windows Forms et du HTML Agility Pack.

Tout fonctionnait très bien lorsque le site a changé de code et l'a cassé. Je sais que cela se produit souvent avec des scrapeurs Web, mais j’ai maintenant du mal à comprendre comment corriger le problème.

À ce stade, mon grattoir parcourt plusieurs URL et récupère les données de chaque page.

Le problème que je rencontre est que le modèle du site visité en boucle affichera de manière aléatoire le modèle plus récent qui ne possède pas les mêmes classes HTML et identifiants que j'ai définis dans le programme. Ce que j'essaie de faire est d'exécuter un simple si cela vérifie si un seul nœud est nul et s'il exécute un ensemble de code séparé pour le nouveau modèle.

Le problème que je rencontre est que mon programme lève une exception NullReferenceException sur mon instruction if.

Voici la déclaration que j'utilise pour vérifier si elle est nulle:

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']").InnerText;

 if (varitem == null) MessageBox.Show("no titles");

Il lève l'exception à la première ligne définissant le varitem et ne parvient même pas à l'instruction if.

Tout conseil apprécié!

Réponse acceptée

D'abord, vous devriez vérifier si

 doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']")

renvoie null.

Si elle est nulle, vous aurez la NullReferenceException de null.InnerText


Réponse populaire

essayez ci-dessous

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");

SelectSingleNode peut renvoyer null et vous devez également vérifier si InnerText n'est pas non plus null ou vide.

var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi