как скопировать весь текст с определенной веб-страницы и сохранить его в блокноте С#

У меня есть приложение С# Windows Forms, которое запускает веб-страницу на основе некоторых критериев.

Теперь я хотел бы, чтобы мое приложение автоматически копировало весь текст с этой страницы (в формате CSV), вставляло и сохраняло его в блокноте.

Вот ссылка на пример данных, которые необходимо скопировать: http://www.wunderground.com/history/airport/FAJS/2012/10/28/DailyHistory.html?req_city=Йоханнесбург&req_state=&req_statename=Юг+Африка&format =1

Любая помощь будет оценена.


person Patrick Doyle    schedule 29.10.2012    source источник


Ответы (5)


http://msdn.microsoft.com/en-us/library/fhd1f0sw.aspx в сочетании с http://www.dotnetspider.com/resources/21720-Writing-string-content-file.aspx

public static void DownloadString ()
{
    WebClient client = new WebClient();
    string reply = client.DownloadString("http://www.wunderground.com/history/airport/FAJS/2012/10/28/DailyHistory.html?req_city=Johannesburg&req_state=&req_statename=South+Africa&format=1");

    StringBuilder stringData = new StringBuilder();
    stringData = reply;  
    FileStream fs = new FileStream(@"C:\Temp\tmp.txt", FileMode.Create);
    byte[] buffer = new byte[stringData.Length];
    for (int i = 0; i < stringData.Length; i++)
    {
        buffer[i] = (byte)stringData[i];
    }
    fs.Write(buffer, 0, buffer.Length);
    fs.Close();
}

Изменить Адиль использует метод WriteAllText, который даже лучше. Таким образом, вы получите что-то вроде этого:

WebClient client = new WebClient();
string reply = client.DownloadString("http://www.wunderground.com/history/airport/FAJS/2012/10/28/DailyHistory.html?req_city=Johannesburg&req_state=&req_statename=South+Africa&format=1");
System.IO.File.WriteAllText (@"C:\Temp\tmp.txt", reply);
person JP Hellemons    schedule 29.10.2012
comment
Большое спасибо. На самом деле это самый простой и быстрый способ. Спасибо - person Patrick Doyle; 29.10.2012

Вы можете использовать новую игрушку HttpClient из . NET 4.5, пример того, как получить страницу Google:

 var httpClient = new HttpClient();
 File.WriteAllText("C:\\google.txt",    
                           httpClient.GetStringAsync("http://www.google.com")
                                     .Result);  
person cuongle    schedule 29.10.2012
comment
@Mr_Green: да, все еще работает, но вам нужно установить библиотеку, содержащую HttpClient из nuget - person cuongle; 29.10.2012

Простой способ: используйте WebClient.DownloadFile и сохраните как .txt файл:

var webClient = new WebClient();
webClient.DownloadFile("http://www.google.com",@"c:\google.txt");
person Ria    schedule 29.10.2012

Для читать поток и сохранять в строку в текстовый файл. Вы можете использовать File.WriteAllText чтобы записать его в файл.

WebRequest request = WebRequest.Create ("http://www.contoso.com/default.html");
                    request.Credentials = CredentialCache.DefaultCredentials;            
HttpWebResponse response = (HttpWebResponse)request.GetResponse ();            
Console.WriteLine (response.StatusDescription);            
Stream dataStream = response.GetResponseStream ();            
StreamReader reader = new StreamReader (dataStream);            
string responseFromServer = reader.ReadToEnd ();
System.IO.File.WriteAllText (@"D:\path.txt", responseFromServer );
person Adil    schedule 29.10.2012

Для этого вы можете использовать веб-клиент:

System.Net.WebClient wc = new System.Net.WebClient();
byte[] raw = wc.DownloadData("http://www.wunderground.com/history/airport/FAJS/2012/10/28/DailyHistory.html?req_city=Johannesburg&req_state=&req_statename=South+Africa&format=1");

string webData = System.Text.Encoding.UTF8.GetString(raw);

тогда строка webData содержит полный текст веб-страницы

person Paedow    schedule 29.10.2012
comment
Вы также можете использовать метод DownloadString - person JP Hellemons; 29.10.2012
comment
Я думаю, что StringBuilder предпочтительнее из-за больших данных? просто спрашиваю, я новичок. - person Mr_Green; 29.10.2012
comment
хорошо, понял, спасибо.. я думал по-другому @JPHellemons - person Mr_Green; 29.10.2012