<%@ 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;
}
}
}
執行結果:
檢視原始碼:
沒有留言:
張貼留言