Получить веб-страницу с помощью HtmlAgilityPack.NETCore

.net-core c# html-agility-pack

Вопрос

Я использовал HtmlAgilityPack для работы с html-страницами. Раньше я это делал:

HtmlWeb web = new HtmlWeb();
HtmlDocument document = web.Load(url);
var nodes = document.DocumentNode.SelectNodes("necessary node");

но теперь мне нужно использовать HtmlAgilityPack.NETCore, где отсутствует HtmlWeb . Что я должен использовать вместо HtmlWeb чтобы иметь тот же результат?

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

Используйте HttpClient как новый способ взаимодействия с удаленными ресурсами через http.

Что касается вашего решения, вероятно, вам нужно использовать методы async здесь для неблокирования вашего потока, а .Result использования .Result . Также обратите внимание, что HttpClient предназначался для использования из разных потоков, начиная с .Net 4.5, поэтому вы не должны воссоздавать его каждый раз:

// instance or static variable
HttpClient client = new HttpClient();

// get answer in non-blocking way
using (var response = await client.GetAsync(url))
{
    using (var content = response.Content)
    {
        // read answer in non-blocking way
        var result = await content.ReadAsStringAsync();
        var document = new HtmlDocument();
        document.LoadHtml(result);
        var nodes = document.DocumentNode.SelectNodes("Your nodes");
        //Some work with page....
    }
}

Отличная статья о async / await: Async / Await - лучшие практики в асинхронном программировании by @StephenCleary | Март 2013 г.


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

У меня была такая же проблема в коде Visual Studio с netcoreapp1.0. Завершилось использование HtmlAgilityPack версии 1.5.0-beta5 вместо этого.

Remenber:

using HtmlAgilityPack;
using System.Net.Http;
using System.IO;

Я сделал это так:

HttpClient hc = new HttpClient(); 
HttpResponseMessage result = await hc.GetAsync($"http://somewebsite.com"); 
Stream stream = await result.Content.ReadAsStreamAsync(); 
HtmlDocument doc = new HtmlDocument(); 
doc.Load(stream); 
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//div[@class='whateverclassyouarelookingfor']");


Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему