出處:http://www.dotblogs.com.tw/shadow/archive/2011/12/12/61598.aspx
套件下載與介紹:HTML Agility Pack:簡單好用的快速 HTML Parser
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form runat="server"> <!--顯示第一筆的超連結--> <asp:Literal ID="li_showData" runat="server" /> </form> </body> </html>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data.SqlClient; using System.Data; using System.Net; using System.Text; using System.IO; /*要引用此命名空間*/ using HtmlAgilityPack; public partial class _Default : System.Web.UI.Page { //Page_Load事件 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { WebClient client = new WebClient(); MemoryStream ms = new MemoryStream(client.DownloadData("http://www.labor.gov.tw/hotnews_certification.asp")); HtmlDocument doc = new HtmlDocument(); //使用UTF8反而會變亂碼,要用Default doc.Load(ms, Encoding.Default); //doc為全部的Html Code /* 目前 HTML Agility Pack 預設編碼應是法文編碼,所以如果是讀取中文 HTML 內容的話,無法直接使用 HtmlDocument.LoadHtml() 方法, * 而要透過 MemoryStream 使用 HtmlDocument.Load() 方法,才可以指定中文的編碼。 */ // 裝載第一層查詢結果 HtmlDocument newsHtml = new HtmlDocument(); //數字從1算起,要注意抓下來的Html Code,階層不一定跟來源網站完全一樣 //遇到DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" //<meta http-equiv="Content-Type" content="text/html; charset=big5"/>這行的,又要重新LoadHtml從html[1]開始算起 //串到一半覺得階層太過深入的話,可以把原始碼貼到VS設計畫面後再利用熱鍵(Ctrl+K,Ctrl+D)來排版 //註解應該不用算 newsHtml.LoadHtml(doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/table[1]/tr[1]/td[1]/table[1]/tr[2]/td[1]/table[1]/tr[1]/td[2]/table[1]/tr[1]/td[1]").InnerHtml); //最新消息的Html table newsHtml.LoadHtml(newsHtml.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/table[1]/tr[2]/td[1]").InnerHtml); /*使用OuterHtml或InnerHtml顯示出來的Html Code都一樣*/ string showData = newsHtml.DocumentNode.SelectSingleNode(@"/table[1]/tbody[1]/tr[3]/td[2]").InnerHtml + "," + newsHtml.DocumentNode.SelectSingleNode(@"/table[1]/tbody[1]/tr[3]/tr[1]/td[2]").InnerHtml + "," + newsHtml.DocumentNode.SelectSingleNode(@"/table[1]/tbody[1]/tr[3]/tr[1]/tr[1]/td[2]").InnerHtml + "," + newsHtml.DocumentNode.SelectSingleNode(@"/table[1]/tbody[1]/tr[3]/tr[1]/tr[1]/tr[1]/td[2]").InnerHtml + ","; /*ChildNodes[0]數字從0算起*/ Response.Write(showData+"<hr/>"); /*嘗試抓取第一筆的超連結*/ li_showData.Text = newsHtml.DocumentNode.SelectSingleNode(@"/table[1]/tbody[1]/tr[3]/td[2]").ChildNodes[0].Attributes["href"].Value; } } }
執行結果:
檢視原始碼: