星期三, 2月 28, 2007

[.Net]讀取網頁(1)

如果你要搞個 spider 或是 bot,需要讀取網頁的話,用 WebClient 就綽綽有餘了~
using System.Net;

public class Network
{
    public static string wget( string url )
    {
        WebClient _client=new WebClient();
        string result="";
            
        try {
            // 藉著修改 Header,可以用來模擬某特定 Browser,以下是模擬 IE 6
            _client.Headers.Add("Accept","image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*");
            _client.Headers.Add("Accept-Language","zh-tw");
            _client.Headers.Add("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)");

            // 表示支援壓縮,也就是說,你可以丟壓縮過的資料過來,我來解~
            //_client.Headers.Add("Accept-Encoding","gzip, deflate");

            // read
            System.IO.Stream objStream=_client.OpenRead( url );

            // 要知道正確的編碼,再去讀取~.Net會幫我們自動轉為 unicode 字串。這邊預設都是 UTF8
            System.IO.StreamReader _reader=new System.IO.StreamReader(objStream,System.Text.Encoding.UTF8);
            //System.IO.StreamReader _reader=new System.IO.StreamReader(objStream,System.Text.Encoding.GetEncoding(950));
            result = _reader.ReadToEnd();
        }
        catch( Exception ex ) {
            throw ex;
        }
        finally {
        }
            
        return result;
    }
}

所以我們就可以這麼用
Console.WriteLine( Network.wget("http://www.google.com.tw") );

目前有個決定性的缺點:必須先知道網頁編碼,我們才能讀到正確的文字~有辦法先知道網頁的編碼,再去決定要怎麼讀取嗎?

沒有留言: