HTML-Daten können nicht über https URL mit htmlagilitypack heruntergeladen werden

c# html html-agility-pack https web-scraping

Frage

Ich habe ein "kleines" Problem htmlagilitypack (HAP). Als ich versuchte, Daten von einer Website zu erhalten, erhalte ich folgende Fehlermeldung:

Eine nicht behandelte Ausnahme vom Typ 'System.ArgumentException' ist in mscorlib.dll aufgetreten

Zusätzliche Informationen: 'gzip' ist kein unterstützter Kodierungsname. Informationen zum Definieren einer benutzerdefinierten Codierung finden Sie in der Dokumentation zur Encoding.RegisterProvider-Methode.

Ich verwende diesen Code, um die Daten von der Website zu erhalten:

HtmlWeb page = new HtmlWeb();
var url = "https://kat.cr/";
var data = page.Load(url);

Nach diesem Code bekomme ich diesen Fehler. Ich habe alles aus dem Google versucht, aber nichts half.

Kann mir jemand sagen, wie ich dieses Problem lösen kann?

Vielen Dank

Akzeptierte Antwort

HtmlWeb unterstützt das Herunterladen von https nicht. Stattdessen können Sie den WebClient mit ein wenig Modifikation verwenden, um GZip automatisch zu dekomprimieren:

class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = base.GetWebRequest(address) as HttpWebRequest;
        request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
        return request;
    }
}

Verwenden HtmlDocument.LoadHtml() dann HtmlDocument.LoadHtml() , um Ihre HtmlDocument Instanz aus der HTML-Zeichenfolge zu HtmlDocument :

var url = "https://kat.cr/";
var data = new MyWebClient().DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(data);

Beliebte Antwort

Sie können die Anforderung abfangen, wenn Sie HtmlWeb , um sie basierend auf Ihren Anforderungen zu ändern.

var page = new HtmlWeb()
{
  PreRequest = request =>
  {
    // Make any changes to the request object that will be used.
    request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
    return true;
  }
};

var url = "https://kat.cr/";
var data = page.Load(url);


Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow