Как загрузить HTML-страницу с помощью пакета htmlagility pack C#?
- Привет!
Я хотел бы загрузить html-страницу и взять некоторую информацию, создавая приложение C#.
Я получил следующую ошибку:
Необработанное исключение типа "System.NullReferenceException" произошло в CursorMove.exe
Дополнительная информация: ссылка на объект не установлена на экземпляр объекта.
Не могли бы вы мне помочь?
Что я уже пробовал:
...
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb(); string url = "https://www.site.com"; HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc = web.Load(url); var nodes = doc.DocumentNode.SelectSingleNode("//span[@ class='a-size-medium']"); var inner = doc.DocumentNode.SelectNodes("//div[@ class='sc-list-item-content']"); foreach (HtmlAgilityPack.HtmlNode item44 in inner) (//The error is in this line//) { cnt_array[cnt] = item44.InnerText; textBox2.Text = cnt_array[5]; cnt++; }
...
F-ES Sitecore
Вероятно, существует проблема с загрузкой url-адреса, который вы ему даете, или проблема с html-кодом на этом url-адресе.
Kornfeld Eliyahu Peter
На какой линии ошибка?
Member 12268183
Вот мой код (я отметил строку с ошибкой. Приложение построено успешно но во время выполнения возникает ошибка):
var nodes = doc.DocumentNode.SelectSingleNode("//span[@ class='a-size-medium']");
ВАР внутренний = док.DocumentNode.Метод selectnodes("//див[@ класс='СК-списка, элемента и содержание']");
foreach (HtmlAgilityPack.HtmlNode item44 in inner) (//ошибка находится в этой строке//)
{
cnt_array[cnt] = item44.Через свойство innerText;
textBox2.Text = cnt_array[5];
НКТ++;
}
Kornfeld Eliyahu Peter
Это означает, что "внутреннее" равно нулю.
Но это вы должны знать, если будете использовать отладчик...
Есть две возможные причины:
1. у вас действительно есть пробел (' ') между '@' и 'class'
2. Нет див с таким классом вы ищете - посмотреть содержимое страницы
Mike V Baker
Из документов:
Возвращается:
Пакет HtmlAgilityPack.HtmlNodeCollection содержит коллекцию узлов, соответствующих HtmlAgilityPack.HtmlNode.Запрос XPath, ***или null, если ни один узел не соответствует*** выражению XPath.
Вы проверили, что ваша функция SelectNodes должна возвращать как минимум несколько узлов? Проверили синтаксис поиска? Чувствительность к регистру критериев поиска?
Поскольку документ говорит, что он может возвращать null, вы должны проверить, если (inner != null), прежде чем пытаться его использовать.
ХТХ, Майк
Richard Deeming
Хороший улов. Это похоже на плохой дизайн API - вы ожидаете, что он вернет пустую коллекцию, если не будет совпадений.
Member 12268183
Я вижу, что inner возвращает null. Этот узел работает, когда я загружаю страницу на свой компьютер. Когда я хочу использовать информацию с веб-страницы, inner возвращает null. Как решить эту проблему?
Member 12268183
Я попробовал с другой веб-страницы, и все в порядке. Есть ли что-то особенное в amazon pages?
Richard Deeming
Это звучит так, как будто элемент создается Javascript и на самом деле не является частью источника страницы, отправленной обратно с сервера.
Вероятно, вам нужно будет посмотреть, предлагает ли Amazon API, чтобы вы могли получить информацию, не пытаясь "очистить" страницу.
Member 12268183
Спасибо!
Как я могу увидеть, если Amazon предлагает API, позволяющий получить информацию?
Richard Deeming
Спросите Амазонку.