#c# #web-scraping #html-agility-pack
#c# #очистка веб-страниц #html-agility-pack
Вопрос:
Мне нужна небольшая помощь. Я пытаюсь выполнить простую очистку веб-страниц с помощью HtmlAgility и C # (впервые в истории). Для целей упражнения я пытаюсь использовать XPath «Широта и долгота» из раздела «Последняя позиция» на этом веб-сайте: позиция корабля
Вот мой код на данный момент:
WebClient webClient = new WebClient();
string htmlCode = webClient.DownloadString("https://www.marinetraffic.com/en/ais/details/ships/shipid:994899/mmsi:311000306/imo:9696773/vessel:ALFA_BALTICA");
HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
document.LoadHtml(htmlCode);
HtmlNode node = document.DocumentNode.SelectSingleNode("//*[@id="vesselDetails_latestPositionSection"]/div[2]/div/div/div/div/div[1]/p[5]/b/a");
Я получаю: «System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта».
Конечно, мой вопрос глупый, но мне действительно интересно, как это можно сделать.
Комментарии:
1. Я думаю, это может быть связано с тем, что веб-сайт отображается с помощью javascript вместо чистого HTML, каков результат
htmlCode
?2. Чтобы развить то, что сказал @nabais, если «node» — это то, что равно нулю, посмотрите на содержимое «htmlCode» и посмотрите, существует ли это значение, которое вы ищете. Если он сгенерирован с помощью JavaScript, как предположил nabais, тогда вам может потребоваться загрузить HTML через какой-то объект / элемент управления браузера, в котором есть движок JS. В этом сценарии вы загружаете страницу в элемент управления или объект движка браузера, а затем используете DOM из этого (или, по крайней мере, получаете то, что из него выводится, для загрузки в HtmlAgilityPack).