最近做了一個項目,要求獲取各大主流網頁上的關鍵信息,本人以前了解過網頁爬蟲的知識,所以想到了網頁爬蟲了實現功能
第一次嘗試:
采用webclient獲取遠程網頁的內容,然后采用正則表達式進行過濾
但,由於正則表達式對我來說,書寫起來比較復雜,研究個大半個月,一點進展都沒有,每天看着正則表達式像看天書(回頭需要向正則牛逼的人請教一下)
第一次嘗試失敗,項目馬上就要驗收了,這個功能一直卡殼了,,,,,,,,
突然有一次,在網上看到了有人提及到了HtmlAgilityPack這個開源的工具包,本想着試一下的態度(因為我對這個網頁解析已經不抱有希望了)
僅僅有了幾行的代碼,居然跟我的需求一樣實現了,萬分高興(此處使用HtmlAgilityPack需要學習一下xpath的一點知識,不過那些都很簡單,比起正則太easy了)
好了,廢話不多說,上代碼
1、去官網上下載一個HtmlAgilityPack包,地址:http://htmlagilitypack.codeplex.com/
2、根據自己項目的.net版本,選擇適合的版本,引入項目
3、開始寫代碼了
HtmlAgilityPack基本跟所有的類一樣,直接使用里面的方法和屬性就行,具體可以參考官網
//獲取網頁指定內容 public void GetHtml() { string htmlpath = "http://kaijiang.aicai.com/fcssq/"; //創建對象 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); WebClient webclient = new WebClient(); webclient.Credentials = CredentialCache.DefaultCredentials;//網絡憑證 Byte[] pageData = webclient.DownloadData(htmlpath); // string pagehtml = Encoding.Default.GetString(pageData); //默認編碼 string pagehtml = Encoding.UTF8.GetString(pageData);//UTF-8編碼 //用htmlagilitypack 解析網頁內容 //加載html doc.LoadHtml(pagehtml); //通過xpath 選中指定元素;xpath 參考:http://www.w3school.com.cn/xpath/xpath_syntax.asp HtmlAgilityPack.HtmlNode htmlnode = doc.DocumentNode.SelectSingleNode("//div[@id='jq_openResult']"); StringBuilder sb = new StringBuilder(); string s = ""; HtmlAgilityPack.HtmlNodeCollection nodecollection = htmlnode.ChildNodes; for (int i = 0; i < nodecollection.Count; i++) { if (nodecollection[i].InnerText.Trim()!="") { TextBox1.Text += nodecollection[i].InnerText + "-"; } } TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1); Console.WriteLine(s); }
至此,HtmlAgilityPack就完全按照自己的要求解析出來了網頁上的任何你想要的,是不是很神奇~~