用C#開發蜘蛛網絡爬蟲采集程序(附源碼)(一)


開發爬蟲程序首先要先得到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代碼並把文本內容保留下來了。

 

 用C#開發蜘蛛網絡爬蟲采集程序(一)

 用C#開發蜘蛛網絡爬蟲采集程序(二)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM