Obtener la página web utilizando HtmlAgilityPack.NETCore

.net-core c# html-agility-pack

Pregunta

Utilicé el HtmlAgilityPack para trabajar con páginas html. Anteriormente hice esto:

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

pero ahora necesito usar el HtmlAgilityPack.NETCore donde HtmlWeb está ausente. ¿Qué debo usar en lugar de HtmlWeb para obtener el mismo resultado?

Respuesta aceptada

Use el HttpClient como una nueva forma de interactuar con recursos remotos a través de http.

En cuanto a su solución, es probable que necesite utilizar los async métodos aquí para no bloquear el hilo, en vez de .Result uso. También tenga en cuenta que HttpClient fue diseñado para ser usado desde diferentes hilos a partir de .Net 4.5, por lo que no debe recrearlo cada vez:

// 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....
    }
}

Gran artículo sobre async / await: Async / Await - Mejores prácticas en programación asíncrona por @StephenCleary | Marzo 2013


Respuesta popular

Tuve el mismo problema en el código de Visual Studio con netcoreapp1.0. Terminé usando HtmlAgilityPack versión 1.5.0-beta5 en su lugar.

Recordar:

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

Lo hice así:

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']");


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué