最近作了一個項目,要求獲取各大主流網頁上的關鍵信息,本人之前瞭解過網頁爬蟲的知識,因此想到了網頁爬蟲了實現功能css
第一次嘗試:html
採用webclient獲取遠程網頁的內容,而後採用正則表達式進行過濾node
但,因爲正則表達式對我來講,書寫起來比較複雜,研究個大半個月,一點進展都沒有,天天看着正則表達式像看天書(回頭須要向正則牛逼的人請教一下)web
第一次嘗試失敗,項目立刻就要驗收了,這個功能一直卡殼了,,,,,,,,正則表達式
忽然有一次,在網上看到了有人說起到了HtmlAgilityPack這個開源的工具包,本想着試一下的態度(由於我對這個網頁解析已經不抱有但願了)網頁爬蟲
僅僅有了幾行的代碼,竟然跟個人需求同樣實現了,萬分高興(此處使用HtmlAgilityPack須要學習一下xpath的一點知識,不過那些都很簡單,比起正則太easy了)網絡
好了,廢話很少說,上代碼工具
一、去官網上下載一個HtmlAgilityPack包,地址:http://htmlagilitypack.codeplex.com/學習
二、根據本身項目的.net版本,選擇適合的版本,引入項目ui
三、開始寫代碼了
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就徹底按照本身的要求解析出來了網頁上的任何你想要的,是否是很神奇~~