abolfazl133 Ответов: 3

Проблема с htmlagilitypack, пытающимся получить содержимое href


Здравствуйте дорогие друзья
у меня есть проблема с HTmlAgilityPac. у меня есть такой пегий:
<div Class="bd"><h3 class=""><a class="title main-headline" href="test">abolfaz jason</a></h3></div>


теперь мне нужен доступ к содержимому inside in a href ("abolfazl jason"). мой код таков:
Dim doc As New HtmlAgilityPack.HtmlDocument()
doc.LoadHtml("linkurl...")
Dim nodes As HtmlNode = doc.DocumentNode.SelectSingleNode("//div[@class='bd']//a")
Response.Write(nodes.InnerText)


но запустить приложение произошла ошибка: "
Object reference not set to an instance of an object.
"

Вы не могли бы мне помочь?

Что я уже пробовал:

Проблема с HTmlAgilityPack, пытающимся получить содержимое href

[no name]

Что это такое, что вам нужна помощь? Простой поиск в google подскажет вам, что означает эта ошибка и как ее исправить. Поиск по сайту подскажет вам, что означает ошибка и как ее исправить. Запуск вашего кода через отладчик подскажет вам, что означает ошибка и как ее исправить.

abolfazl133

нет, это не так просто! у меня серьезная проблема. если вы знаете ответ, пожалуйста, напишите правильный код!

[no name]

Да, на самом деле все так просто.

3 Ответов

Рейтинг:
2

abolfazl133

Здравствуй, дорогой друг. у меня есть серьезная проблема с Html Agility Pack. пожалуйста, посмотрите мой код:

первый код при запуске на сохраненном файле в системе работает корректно но не работает с тем же содержимым в онлайн url и возвращает пустые значения:

это работа пустое значение!

Dim Scr1 As New HtmlWeb()
Dim Url1 = Scr1.Load("https://www.linkedin.com/in/ladan-sahraei-14461b34?authType=OUT_OF_NETWORK&authToken=tK-W&locale=en_US&srchid=4367283831473659871577&srchindex=1&srchtotal=6693647&trk=vsrp_people_res_name&trkInfo=VSRPsearchId%3A4367283831473659871577%2CVSRPtargetId%3A120972292%2CVSRPcmpt%3Aprimary%2CVSRPnm%3Afalse%2CauthType%3AOUT_OF_NETWORK")
Dim ournone As HtmlNode = Url1.DocumentNode.SelectSingleNode("//span[@class='full-name']")
Response.Write(ournone.InnerHtml)


это работа правильная!
Dim Scr1 As New HtmlWeb()
Dim Url1 = Scr1.Load("http://localhost:21374/HtmlPage.html")
Dim ournone As HtmlNode = Url1.DocumentNode.SelectSingleNode("//span[@class='full-name']")
Response.Write(ournone.InnerHtml)


Рейтинг:
0

David_Wimbley

Ваш код работает. Я взял вашу HTML строку и сохранил ее в c:\temp\test.html на моей локальной машине.

var html = @"c:\temp\test.html";

            var doc = new HtmlDocument();
            doc.Load(html);

            var nodes = doc.DocumentNode.SelectSingleNode("//div[@class='bd']//a");

            Console.WriteLine(nodes.InnerText);


Однако я вижу в вашем коде, что у вас есть

doc.LoadHtml("linkurl...")


Вы пытаетесь загрузить HTML-данные и прочитать их оттуда? Это может быть вашей проблемой.

Вы должны использовать WebClient для загрузки ссылки. Что-то вроде этого.

var client = new WebClient();
            client.DownloadFile("http://link/to/your/stuff", @"c:\local\filename.html");


Вы также можете просто использовать .Загрузите данные, преобразуйте эти байты в stream reader и используйте перегрузку методов загрузки HtmlDocument для загрузки HTML из потока.

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


Рейтинг:
0

abolfazl133

Дорогой Дэвид, я проверяю твое решение. я немного меняю свой код. я думаю, что будет лучше, если вы увидите мой код и основной url-адрес и код:

Dim Scr1 As New HtmlWeb()
Dim Url1 = Scr1.Load("https://www.linkedin.com/vsearch/p?openAdvancedForm=true&locationType=Y&f_I=47&rsid=4367283831473569842080&orig=ADVS")
Dim ournone As HtmlNode = Url1.DocumentNode.SelectSingleNode("//div[@class='bd']//a")
Response.Write(ournone.InnerHtml)


у меня еще есть проблема! пожалуйста, помогите мне


David_Wimbley

Надо было оставить это как комментарий, а не как другое решение.

Итак, ваша первая проблема - это то, что я сказал вам в предоставленном решении. . Load () не имеет перегрузки для синтаксического анализа HTML из URL-адреса. Похоже, теперь вы изменили его с HtmlDocument на HtmlWeb.

Теперь ваш код не будет работать, так как HtmlWeb не имеет свойства DocumentNode.

Вам нужно потратить некоторое время на поиск примеров htmlagilitypack в Google. В решении, которое я предоставил, я рассказал вам, как использовать URL-адреса, если это то, что вы используете.

abolfazl133

Да дорогой Дэвид
пожалуйста, посмотрите мой код сейчас. это работа:
Dim Scr1 Как Новый HtmlWeb()
Тусклый Url1 = Scr1.Load("https://www.linkedin.com/vsearch/p?openAdvancedForm=true&locationType=Y&f_I=47&rsid=4367283831473569842080&orig=ADVS")
Dim ournone As HtmlNode = Url1. DocumentNode.SelectSingleNode ("//div[@class= 'wrapper']")
Ответ.Напиши(ournone.свойство innerHTML)

его ответ: LinkedIn Corporation © 2016

но мне нужно получить значение "abolfazl jason" в коде linkedin:
&ЛТ;Н3 класса=""&ГТ;&ЛТ;класс="заголовок основной заголовок" с href="https://www.linkedin.com/profile/"&ГТ;аболфазл формате JSON&ЛТ;/а&ГТ;&ЛТ;промежуток класс="значки"&ГТ;&ЛТ;службы&ГТ;&ЛТ;сокр Ария-скрытые="правда" название="аболфазл JSON является 2-й степени контакт" класс="степень-значок "и GT;2&ЛТ;суп&ГТ;НД&ЛТ;/SUP-серфинг&ГТ;&ЛТ;/сокр&ГТ;&ЛТ;/службы&ГТ;&ЛТ;/службы&ГТ;&ЛТ;/Н3&ГТ;
поэтому я должен написать этот код, который не работает. я думаю, что проблема заключается в выражении внутри SelectSingleNode

Dim Scr1 Как Новый HtmlWeb()
Тусклый Url1 = Scr1.Load("https://www.linkedin.com/vsearch/p?openAdvancedForm=true&locationType=Y&f_I=47&rsid=4367283831473569842080&orig=ADVS")
Dim ournone As HtmlNode = Url1. DocumentNode.SelectSingleNode ("//div[@class='bd']/ / a")
Ответ.Напиши(ournone.свойство innerHTML)

David_Wimbley

Это серьезный вопрос, но Вы читаете мои ответы? То, что вам нужно сделать для загрузки с URL-адреса, опубликовано в моем решении.

abolfazl133

Дорогой Дэвид,я думаю, что не могу ясно объяснить свою проблему. это моя проблема:

а) у меня есть url-адрес:
https://www.linkedin.com/vsearch/p?openAdvancedForm=true&locationType=Y&f_I=47&rsid=4367283831473569842080&orig=ADVS

б) внутри этого url-адреса есть html-код, подобный этому:
&ЛТ;Н3 класса=""&ГТ;&ЛТ;класс="заголовок основной заголовок" с href="https://www.linkedin.com/profile/"&ГТ;аболфазл формате JSON&ЛТ;/а&ГТ;&ЛТ;промежуток класс="значки"&ГТ;&ЛТ;службы&ГТ;&ЛТ;сокр Ария-скрытые="правда" название="аболфазл JSON является 2-й степени контакт" класс="степень-значок "и GT;2&ЛТ;суп&ГТ;НД&ЛТ;/SUP-серфинг&ГТ;&ЛТ;/сокр&ГТ;&ЛТ;/службы&ГТ;&ЛТ;/службы&ГТ;&ЛТ;/Н3&ГТ;

в) мне нужен .net-код от HtmlAgilityPack, который может возвращать текст "abolfazl json" внутри тега href для меня.