C # HTML Agility Pack Único nodo seleccionado que devuelve nulo

c# html-agility-pack web-scraping winforms

Pregunta

Tengo un raspador web desarrollado utilizando C #, formularios de Windows y el paquete de agilidad HTML.

Lo tenía todo funcionando bien cuando el sitio cambió su código y lo rompió. Sé que sucede a menudo con los raspadores web, pero ahora estoy teniendo problemas para resolver el problema.

En este momento, mi raspador recorre múltiples URL y raspa los datos de cada página.

El problema con el que me estoy topando es que la plantilla del sitio que recorre mostrará aleatoriamente la plantilla más nueva que no tiene las mismas clases de HTML e ID que he definido en el programa. Lo que estoy tratando de hacer es ejecutar un simple si eso comprueba si un solo nodo es nulo y si se ejecuta un conjunto separado de código para la nueva plantilla.

El problema que tengo es que mi programa lanza una NullReferenceException en mi sentencia if.

Aquí está la declaración que estoy usando para verificar si es nula:

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

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

Lanza la excepción en la primera línea que define el varitem y ni siquiera llega a la instrucción if.

Cualquier consejo apreciado!

Respuesta aceptada

Primero debes comprobar si

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

devuelve nulo.

Si es nulo, obtendrá la NullReferenceException de null.InnerText


Respuesta popular

intente a continuación

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

SelectSingleNode puede devolver nulo y también es mejor que compruebe si InnerText tampoco es nulo o está vacío.

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué