C # HTML Agility Pack Single Select Node restituisce null

c# html-agility-pack web-scraping winforms

Domanda

Ho un raschietto web sviluppato utilizzando C #, i moduli Windows e l'HTML Agility Pack.

Ho funzionato tutto alla grande quando il sito ha cambiato il suo codice e l'ha rotto. So che succede spesso con i web scrapers ma ora ho problemi a capire come correggere il problema.

In questo momento il mio raschietto scorre attraverso più URL e raschia dati da ciascuna pagina.

Il problema che sto incontrando è che il modello del sito che esegue il ciclo mostrerà casualmente il modello più recente che non ha le stesse classi HTML e ID che ho definito nel programma. Quello che sto cercando di fare è eseguire un semplice se questo verifica se un singolo nodo è nullo e se viene eseguito un set separato di codice per il nuovo modello.

Il problema che sto avendo è che il mio programma lancia una NullReferenceException sulla mia dichiarazione if.

Ecco la frase che sto usando per verificare se è null:

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

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

Genera l'eccezione nella prima riga che definisce il varitem e non arriva nemmeno all'istruzione if.

Qualsiasi consiglio apprezzato!

Risposta accettata

Per prima cosa dovresti controllare se

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

restituisce null.

Se è nullo, ottieni NullReferenceException da null.InnerText


Risposta popolare

prova qui sotto

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

SelectSingleNode può restituire null e inoltre è meglio controllare se anche InnerText non è nullo o vuoto

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché