多年以前,已經忘了是從哪邊學到有關抓網頁的語法,當時能夠把網頁抓回來就已經很開心了,後面的扒資料雖然扒的很辛苦,卻也甘之如飴。時日漸增,如今想到要扒資料,不免有點力不從心。經由 Gower 的推薦,找到 HTML Agility Pack,透過類似 XML 的 XPath 方式,可以很容易的找到所需要的內容。
基本的 HTML Agility Pack 介紹可以參考 HTML Agility Pack:簡單好用的快速 HTML Parser。
我在官網下載了 [Documentation] 手冊,並在 Agility 裡面找到 HtmlWeb 類別提供了一個 Load() 方法,經測試後,的確會如該文章作者所說,對於中文會出現亂碼的問題,不過可以透過設定編碼方式來解決,可參考:
HtmlAgilityPack - How to set custom encoding when loading pages
HtmlDocument hDoc = new HtmlDocument(); HtmlWeb hw = new HtmlWeb(); hw.AutoDetectEncoding = false; hw.OverrideEncoding = System.Text.Encoding.Default; hDoc=hw.Load("http://tw.stock.yahoo.com/q/q?s=2002"); string strResult = hDoc.DocumentNode.OuterHtml;
這裡去抓取網頁的方法是透過 HtmlWeb.Load(),而文章作者使用的則是 WebClient.DownloadData(),古早前我所學到的則是 WebRequest.GetResponse(),這三者雖然都可以完成抓網頁的功能,但以效能來說:
WebRequest.GetResponse() > WebClient.DownloadData() > HtmlWeb.Load()
可由以下效能測試圖表觀察得知。
[統計程式下載]
經由多次的測試結果來看,使用 WebRequest.GetResponse 與 WebClient.DownloadData 效能都還不錯,但使用 HtmlWeb.Load 的效能就差很多,如果將來有考慮到效能問題,應該避開使用 HtmlWeb.Load 方法。
參考:
沒有留言:
張貼留言