手把手-C#-利用XPATH-Helper與htmlagilitypack 擷取網頁資料!

利用XPATH-Helper與htmlagilitypack 擷取網頁資料

話說htmlagilitypack這套件,在網路上已經很多前輩分享了!

小弟在此只是工作上應用的範例,等於是備忘錄嚕

閒字不打,直接開始嚕!!

工欲善其事,必先利其器!

第一步驟

首先先安裝chrome瀏覽器上的擴充元件XPATH Helper

安裝位置

使用方式

ctrl+shift+x

按著SHIFT 滑鼠移過去,左邊為XPATH的節點,右邊為選取的結果!

第二步驟

透過NUGET取得htmlagilitypack套件

位置<==請點我

複製紅色圈起來的指令

開啟Visual studio 2012 > 工具 > NuGet套件管理員 > 套件管理器主控台 

將複製的指令貼在下方的命令模式列,透過NuGet將htmlagilitypack做下載,主要可以幫你驗證套件版本相容性

 

步驟三

開始刻CODE了

先在畫面上拉出一個按鈕,兩個label

一個label放標題,另一個label放內容

當然一開始用將HtmlAgilityPack引用近來


using HtmlAgilityPack;

再來在至按鈕事件中


///HtmlWeb 在此不多做介紹,就把它當作跟瀏覽器一樣的東西用來裝載網頁
            HtmlWeb webClient = new HtmlWeb();
            ///將網址放入在webClient.Load
            HtmlAgilityPack.HtmlDocument doc = webClient.Load("https://tw.sports.yahoo.com/news/nba-%E9%9A%8A%E5%8F%B2%E9%A6%96%E5%BA%A6%E6%B2%92%E8%A2%AB%E9%97%9C%E9%96%80-%E7%B1%83%E7%B6%B2-%E6%9A%B4%E9%BE%8D%E5%9B%9E%E5%8A%A0%E6%8B%BF%E5%A4%A7%E5%89%B2%E5%96%89-064933409.html");
            
            ///最後再第一步驟中利用XPATH helper將所要結點取出
            ///記得要把解取出來的如div[@id=xxxx] 拿掉因為在htmlagilitypack裡只能放數字如div[1]並未能直接解析ID的NAME或CLASS NAME
            string title = doc.DocumentNode.SelectSingleNode(@"/html/body/div/div/div/div/div/div/h1").InnerText;
            string content = doc.DocumentNode.SelectSingleNode(@"/html/body/div/div/div/div/div/div/div[1]/div/div").InnerText;
            ///將標題 放置label1中
            titlelabel.Text = title;
            ///將內容 放置label2中
            contentlabel.Text = content;

 

當然最後一定免不了秀出結果畫面嚕

範例檔下載

 

參考資料

  • HTML Agility Pack:簡單好用的快速 HTML Parser