Wie ich den Inhalt einer Webseite abrufen und in der Zeichenfolgenvariablen speichern kann

74

Wie kann ich den Inhalt der Webseite mit ASP.NET abrufen? Ich muss ein Programm schreiben, um den HTML-Code einer Webseite abzurufen und in einer Zeichenfolgenvariablen zu speichern.

kamiar3001
quelle

Antworten:

116

Sie können den WebClient verwenden

WebClient client = new WebClient();
string downloadString = client.DownloadString("http://www.gooogle.com");
Dhinesh
quelle
Leider ist DownloadString (ab .NET 3.5) nicht intelligent genug, um mit Stücklisten zu arbeiten. Ich habe eine Alternative in meine Antwort aufgenommen.
user2246674
13
Keine Abstimmung, weil keine Verwendung (WebClient client = new WebClient ()) {} :)
David Karlaš
3
Dies entspricht der Antwort von Steven Spielberg, die 3 Minuten zuvor veröffentlicht wurde, also keine +1.
BalinKingOfMoria CMs wieder herstellen
72

Ich habe zuvor Probleme mit Webclient.Downloadstring gehabt. Wenn Sie dies tun, können Sie Folgendes versuchen:

WebRequest request = WebRequest.Create("http://www.google.com");
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();
string html = String.Empty;
using (StreamReader sr = new StreamReader(data))
{
    html = sr.ReadToEnd();
}
Scott
quelle
6
Können Sie das Problem, das Sie hatten, näher erläutern?
Greg
17
@ Greg, es war ein leistungsbezogenes Problem. Ich habe es nie wirklich gelöst, aber WebClient.DownloadString würde 5-10 Sekunden brauchen, um den HTML-Code abzurufen, wobei WebRequest / WebResponse fast sofort verfügbar war. Ich wollte nur eine andere alternative Lösung vorschlagen, falls das OP ähnliche Probleme hatte oder etwas mehr Kontrolle über die Anfrage / Antwort haben wollte.
Scott
7
@Scott - +1, um dies zu finden. Führen Sie einfach einige Tests durch. DownloadString dauerte bei der ersten Verwendung viel länger (5299 ms Downloadstring gegenüber 200 ms WebRequest). Getestet in einer Schleife über 50 x BBC, 50 x CNN und 50 x eine andere RSS-Feed-URL, wobei verschiedene URLs verwendet wurden, um ein Caching zu vermeiden. Nach dem ersten Laden kam DownloadString für BBC 20 ms schneller heraus, für CNN 300 ms schneller. Für den anderen RSS-Feed war WebRequest 3 ms schneller. Im Allgemeinen denke ich, dass ich WebRequest für Singles und DownloadString zum Durchlaufen von URLs verwenden werde.
HockeyJ
4
Das hat bei mir perfekt funktioniert, danke! Nur um anderen vielleicht ein wenig Suche zu ersparen, ist WebRequest in System.Net und Stream in System.Io
Eric Barr
1
Scott, @HockeyJ - Ich weiß nicht, was sich geändert hat, seit Sie WebClient verwendet haben, aber als ich es getestet habe (mit .NET 4.5.2), war es schnell genug - 950 ms (immer noch etwas langsamer als eine einzelne WebRequest, die aber 450 ms dauerte sicher nicht 5-10 Sekunden).
BornToCode
27

Ich empfehle nicht zu verwenden WebClient.DownloadString. Dies liegt daran, dass (zumindest in .NET 3.5) DownloadString nicht intelligent genug ist, um die Stückliste zu verwenden / zu entfernen, falls sie vorhanden sein sollte. Dies kann dazu führen, dass die Stückliste ( ) fälschlicherweise als Teil der Zeichenfolge angezeigt wird, wenn UTF-8-Daten zurückgegeben werden (zumindest ohne Zeichensatz) - ick!

Stattdessen funktioniert diese geringfügige Abweichung bei Stücklisten ordnungsgemäß:

string ReadTextFromUrl(string url) {
    // WebClient is still convenient
    // Assume UTF8, but detect BOM - could also honor response charset I suppose
    using (var client = new WebClient())
    using (var stream = client.OpenRead(url))
    using (var textReader = new StreamReader(stream, Encoding.UTF8, true)) {
        return textReader.ReadToEnd();
    }
}
user2246674
quelle
einen Fehlerbericht
einreichen
11
Webclient client = new Webclient();
string content = client.DownloadString(url);

Übergeben Sie die URL der Seite, die Sie erhalten möchten. Sie können das Ergebnis mit htmlagilitypack analysieren.

Lorbeer
quelle