2011-08-09 1 views
1

私はウェブサイトからデータをスクラップする個人的なアプリを書いています。現在、ページを分析する前に全ページを読み込み、これらのページは300〜600 KiBの範囲で表示できます。私がテストした10ページは合計で最大4 MiBです。ページには動的コンテンツが含まれているため、データがどこから始まるのか正確にはわかりません。デリミタがあるので、データを一度にどこにスキャンしたのか分かります。必要な部分だけをダウンロードする方法はありますか?これにより、これらの10ページの合計ダウンロード数が2 MiBに削減されます。C#を使用してウェブページの最初の部分(長さが不明)のみをダウンロードする

答えて

2

ここでは、ストリームから読み込んで、自分自身と一致する10バイトの区切り文字に一致するまでの例を示します。具体的な内容はあなたの責任ではありますが、これはあなたが望むものを達成するための簡単な方法だと思います。

StringBuilder sb = new StringBuilder(); 
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com"); 
using (var resp = request.GetResponse()) 
{ 
    using(StreamReader sr = new StreamReader(resp.GetResponseStream())) 
    { 
     char[10] block; 
     sr.ReadBlock(block, 0, 10); 
     if (block.CharEquals(myDelim)) 
      break; 
     sb.Append(); 
    } 
} 
// Process the StringBuilder here. 

CharEqualsは、2つの文字配列が同じであれば、単純に比較して拡張メソッドであることに注意してください - それに特別なことは何もありません。

3

だけではなく、WebClientWebRequestを使用し、その後、あなたが必要なストリームからのデータのみを取得することができます。

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://google.com"); 
using (var response = request.GetResponse()) 
using(Stream stream = response.GetResponseStream()) 
{ 
    //.. 
} 
0

は、すべてのページをこするから、あなたのロジックを変更することができないことだけが必要となりますそれらを処理してデータを見つける - >ページ、プロセスを読み込み、それに必要なデータが含まれていない場合は、次のページに進みます。

コンテキストに関する知識が豊富であれば、最良の結果を得るために最も可能性の高いページをクロールして最適化するように、コードをクロールする方法をカスタマイズすることができます。

関連する問題