C # HTML Agility Pack Single Выберите Node, возвращающий null

c# html-agility-pack web-scraping winforms

Вопрос

У меня есть скребок, разработанный с использованием C #, оконных форм и HTML Agility Pack.

У меня было все отлично, когда сайт изменил его код и сломал его. Я знаю, что это часто случается с веб-скреперами, но теперь мне трудно понять, как исправить проблему.

В это время мой скребок обходит несколько URL-адресов и сбрасывает данные с каждой страницы.

Проблема, с которой я сталкиваюсь, заключается в том, что шаблон сайта, на котором он выполняется, будет случайным образом отображать новый шаблон, который не имеет одинаковых классов и идентификаторов HTML, которые я определил в программе. То, что я пытаюсь сделать, выполняется простым, если это проверяет, является ли единственный узел, если null, и если он запускает отдельный набор кода для нового шаблона.

Проблема, с которой я сталкиваюсь, заключается в том, что моя программа выдает исключение NullReferenceException в моей инструкции if.

Вот инструкция, которую я использую, чтобы проверить, является ли она нулевой:

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

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

Он выдает исключение в первой строке, определяющей varitem, и даже не делает это в выражении if.

Любой совет приветствуется!

Принятый ответ

Сначала вы должны проверить,

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

возвращает null.

Если он равен нулю, вы получите NullReferenceException из null.InnerText


Популярные ответы

попробуйте ниже

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

SelectSingleNode может возвращать значение null, а также лучше проверить, не InnerText ли InnerText также нулевым или пустым

if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
              MessageBox.Show("no titles");


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow