Obtenir une page Web en utilisant HtmlAgilityPack.NETCore

.net-core c# html-agility-pack

Question

J'ai utilisé HtmlAgilityPack pour travailler avec des pages HTML. Auparavant je faisais ceci:

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

mais maintenant je dois utiliser le HtmlAgilityPack.NETCore où HtmlWeb est absent. Que devrais-je utiliser à la place de HtmlWeb pour avoir le même résultat?

Réponse acceptée

Utilisez HttpClient comme nouveau moyen d'interagir avec des ressources distantes via http.

En ce qui concerne votre solution, vous devrez probablement utiliser les méthodes async ici pour ne pas bloquer votre thread, au lieu de l’utilisation de .Result . Notez également que HttpClient était destiné à être utilisé à partir de différents threads à partir de .Net 4.5, vous ne devez donc pas le recréer à chaque fois:

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

Excellent article sur async / wait: Async / Await - Meilleures pratiques en programmation asynchrone par @StephenCleary | Mars 2013


Réponse populaire

J'ai eu le même problème dans le code Visual Studio avec netcoreapp1.0. Nous avons fini par utiliser HtmlAgilityPack version 1.5.0-beta5 à la place.

Souvenir:

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

Je l'ai fait comme ça:

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi