【學習紀錄】使用Html Agility Pack取得網頁上的資料

簡單描述個人最近學習使用Html Agility Pack取得網頁上的資料的紀錄

以前曾經調整過別人寫的爬文程式
細節有點忘了,邏輯上就是取得指定網頁的HTML語法,取得特定DOM的值
最近想使用不同的程式語言去取得網頁的資料
當取得Html語法後發覺...取得想要的DOM的內容會需要有點複雜的邏輯以及需要有點繁瑣的程式去實作邏輯
我就想找找看有沒有好用的套件可以像JQuery一樣可以輕鬆取得Dom的資料
在msdn上看到有人問類似的問題
提問者還講了Html Agility Pack這個套件
這套件我並沒有研究得很深入,只是針對取得網頁資訊的使用進行研究而已
使用方式是
1.先new一個HtmlDocument的實體
2.使用Load(Stream物件)或LoadHtml(html語法)來載入資料
3.使用SelectSingleNode()或SelectNodes()來選擇單一或多個DocumentNode
我使用的C#語法大概這樣
var document = new HtmlDocument();
document.LoadHtml(html);
var tableNode = document.DocumentNode.SelectSingleNode("//table[@class='xxx']");

select參數是使用XPath的語法,換句話說:「要使用這套件得去學XPath的使用才行」
(我認為為此而學點XPath的使用是值得的)

最後提一下初學該注意的事情
當你取得單一或多個Node後
如果你再直接對查出的Node使用SelectSingleNode()或SelectNodes()的話
你查詢的對象不是你一開始取出的Node,而是整個HtmlDocument在一開始Load的結果
舉例來說,如果你像我之前的語法一樣先取出table
再對內容的tr做一個個處理
那你需要
1.先取得tableNode的InnerHtml
2.建立新的HtmlDocument,Load取得的InnerHtml
3.使用SelectSingleNode()或SelectNodes()