2011-01-21 12 views
20

私は何か文字列を除いて何も持っていないウェブページを持っています。画像はありません。背景色も何もありません。実際にはそれほど長くないプレーンテキストです。C#を使用してウェブサイトからデータを読み取る

ウェブページに文字列を渡して、何か他のもの(例:テキストボックスに表示)に使用できるようにするにはどうすればよいですか(それによって、最も速く効率的です)私はWebClientについて知っていますが、私はそれが私がしたいことをするかどうか分かりませんし、私が最後にしたときには約30秒かかりました。簡単な操作です。

すべてのアイデアをいただければ幸いです。

+1

WebClientクラスへ

クレジットはここに自然な選択です。 Webクライアントは、実行に30秒かかるべきではありません(他のネットワークに問題がないと仮定して)。 – Jimmy

+1

あなたの選択は、WebClientまたはWebRequest/WebResponse(これはWebClientがシーンの下で使用するものです。なぜそれが遅いかに関しては、これは.NET HTTPスタックの実装とは何の関係もありません。ネットワーク上の問題、取得しようとしているWebサイトの実装がうまくいかないために応答が遅くなるなどの問題が発生する可能性があります。たとえば、http://www.google.co.jpあなたのサイトで観察している30秒をはるかに下回るレスポンスを取得するには、数ミリ秒かかります。 –

+0

パスで平均解析するのですか?もしそうなら、あなたはどの技術を解析していますか?すなわち、どのような種類のテキストボックス勝ちフォーム、別のウェブサイトですか? – Rob

答えて

25

WebClientクラスは、例えば、あなたが記述の機能を処理できるよりも多くする必要があります:

System.Net.WebClient wc = new System.Net.WebClient(); 
byte[] raw = wc.DownloadData("http://www.yoursite.com/resource/file.htm"); 

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

か(さらにコメントでフレドリックからの提案に)

System.Net.WebClient wc = new System.Net.WebClient(); 
string webData = wc.DownloadString("http://www.yoursite.com/resource/file.htm"); 

あなたがそれを言います30秒かかりました、あなたはそれ以上に拡大できますか?なぜそれが起こったのかという理由はたくさんあります。あなたは下のレベルに行くと、このような何かを実装できスローサーバ、インターネット接続、危険な実装などなど

HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://www.yoursite.com/resource/file.htm"); 

using (StreamWriter streamWriter = new StreamWriter(webRequest.GetRequestStream(), Encoding.UTF8)) 
{ 
    streamWriter.Write(requestData); 
} 

string responseData = string.Empty; 
HttpWebResponse httpResponse = (HttpWebResponse)webRequest.GetResponse(); 
using (StreamReader responseReader = new StreamReader(httpResponse.GetResponseStream())) 
{ 
    responseData = responseReader.ReadToEnd(); 
} 

はしかし、一日の終わりにWebClientクラスは、のために、この機能を包み込みます君は。そこで、WebClientを使用し、30秒の遅延の原因を調査することをお勧めします。

+2

または、[DownloadString](http://msdn.microsoft.com/sv-se/library/fhd1f0sw.aspx)メソッドを使用して、バイト配列の処理を取り除く: 'string result = wc.DownloadString(... ' –

+1

WebClientクラスを使用してページを保存するボタンをコーディングして、ファイル内の一部のコンテンツをページの内容の一部に置き換えるボタンをコーディングしました。私はそれが主な理由であるとは思っていませんでした。残念なことに私はもはやそのボタンのコードを持っていませんでした。それ以外の場合、私はそれを投稿しました:\ – Iceyoshi

+0

@Fredrik :DownloadStringの提案の+1: – MrEyes

5

テキストをダウンロードしている場合は、私がWebクライアントを使用することをお勧めしてテキストにStreamReaderをを取得したい:

 WebClient web = new WebClient(); 
     System.IO.Stream stream = web.OpenRead("http://www.yoursite.com/resource.txt"); 
     using (System.IO.StreamReader reader = new System.IO.StreamReader(stream)) 
     { 
      String text = reader.ReadToEnd(); 
     } 

これは長い時間がかかっている場合、それはおそらく、ネットワークの問題または問題ですWebサーバー上でブラウザでリソースを開いて、その時間を確認してください。 ウェブページが非常に大きい場合は、その例のように最後まで読むのではなく、チャンクでストリーミングを見たい場合があります。 http://msdn.microsoft.com/en-us/library/system.io.stream.read.aspxを見て、ストリームからの読み方を見てください。

1

提案について WebClientを使用して30秒の遅延の原因を調査することをお勧めします。質問の答えから

System.Net.WebClient unreasonably slow

プロキシ= NULLを設定してみてください。

WebClient wc = new WebClient(); wc.Proxy = null;アレックスBurtsev

0
WebClient client = new WebClient(); 
      using (Stream data = client.OpenRead(Text)) 
      { 
       using (StreamReader reader = new StreamReader(data)) 
       { 
        string content = reader.ReadToEnd(); 
        string pattern = @"((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)"; 
        MatchCollection matches = Regex.Matches(content,pattern); 
        List<string> urls = new List<string>(); 
        foreach (Match match in matches) 
        { 
          urls.Add(match.Value); 
        } 

       } 
関連する問題