開發爬蟲程序首先要先得到Web頁面的HTML代碼,微軟已經為我們提供了很方便的方法,我們可以用WebClient或WebRequest、HttpWebResponse來很容易的得到網站頁面的HTML代碼。最后已經提供源碼下載。
先舉例用WebClient得到HTML代碼的方法。
private string getHTML(string strUrl,Encoding encoding) { Uri url = new Uri(strUrl); WebClient wc = new WebClient(); wc.Encoding = encoding; Stream s = wc.OpenRead(url); StreamReader sr = new StreamReader(s, encoding); return sr.ReadToEnd(); }
調用的時候需要知道頁面的編碼方式,后面會給大家舉個不需要知道編碼方式的例子。先看一下調用的方法:
string html = getHTML("http://www.baidu.com", Encoding.GetEncoding("GB2312"));
接下來就是重點了,用WebRequest、HttpWebResponse來獲取頁面的HTML代碼,而且只需要傳遞進去一個URL就可以了,編碼方式可以由程序來分析,雖然還不太完美,但大部分網站都能識別出來。
先用WebRequest初始化一個實列,然后用GetResponse請求得到的響應返回給HttpWebResponse,通過response.StatusDescription就可以得到編碼方式的代碼,通過分析得到我們需要的網頁編碼方式,最后將HTML代碼讀出來就可以了。
private void getHTMLbyWebRequest(string strUrl) { Encoding encoding = System.Text.Encoding.Default; WebRequest request = WebRequest.Create(strUrl); request.Credentials = CredentialCache.DefaultCredentials; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); if (response.StatusDescription.ToUpper() == "OK") { switch (response.CharacterSet.ToLower()) { case "gbk": encoding = Encoding.GetEncoding("GBK");//貌似用GB2312就可以 break; case "gb2312": encoding = Encoding.GetEncoding("GB2312"); break; case "utf-8": encoding = Encoding.UTF8; break; case "big5": encoding = Encoding.GetEncoding("Big5"); break; case "iso-8859-1": encoding = Encoding.UTF8;//ISO-8859-1的編碼用UTF-8處理,致少優酷的是這種方法沒有亂碼 break; default: encoding = Encoding.UTF8;//如果分析不出來就用的UTF-8 break; } this.Literal1.Text = "Lenght:" + response.ContentLength.ToString() + "<br>CharacterSet:" + response.CharacterSet + "<br>Headers:" + response.Headers + "<br>"; Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream, encoding); string responseFromServer = reader.ReadToEnd(); this.TextBox2.Text = responseFromServer; FindLink(responseFromServer); this.TextBox2.Text = ClearHtml(responseFromServer); reader.Close(); dataStream.Close(); response.Close(); } else { this.TextBox2.Text = "Error"; } }
這樣網頁的HTML代碼就已經得到了,接下來就是處理鏈接和過濾掉沒用的HTML代碼並把文本內容保留下來了。