2014年7月26日 星期六

擷取網頁上的股票

[ASP.NET][C#]使用HtmlAgilityPack(1) 擷取網頁上的股票

增加 四個參考元件 ,等等寫程式會用到
using System.IO;
using HtmlAgilityPack;
using System.Text;
using System.Net;

            //指定來源網頁
            WebClient url = new WebClient();
            //將網頁來源資料暫存到記憶體內
            MemoryStream ms = new MemoryStream(url.DownloadData("http://tw.stock.yahoo.com/q/q?s=1101"));
            //以奇摩股市為例http://tw.stock.yahoo.com
            //1101 表示為股票代碼

            // 使用預設編碼讀入 HTML 
            HtmlDocument doc = new HtmlDocument();
            doc.Load(ms, Encoding.Default);

            // 裝載第一層查詢結果 
            HtmlDocument hdc = new HtmlDocument();

            //XPath 來解讀它 /html[1]/body[1]/center[1]/table[2]/tr[1]/td[1]/table[1] 
            hdc.LoadHtml(doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/center[1]/table[2]/tr[1]/td[1]/table[1]").InnerHtml);

            // 取得個股標頭 
            HtmlNodeCollection htnode = hdc.DocumentNode.SelectNodes("./tr[1]/th");
            // 取得個股數值 
            string[] txt = hdc.DocumentNode.SelectSingleNode("./tr[2]").InnerText.Trim().Split('\n');
            int i = 0;

            // 輸出資料 
            foreach (HtmlNode nodeHeader in htnode)
            {
                //將 "加到投資組合" 這個字串過濾掉
                Response.Write(nodeHeader.InnerText + ":" + txt[i].Trim().Replace("加到投資組合", "") + "
");
                i++;
            }

            //清除資料
            doc = null;
            hdc = null;
            url = null;
            ms.Close();

增加 四個參考元件 ,等等寫程式會用到
using System.IO;
using HtmlAgilityPack;
using System.Text;
using System.Net;


//指定來源網頁
WebClient url = new WebClient();
//將網頁來源資料暫存到記憶體內
MemoryStream ms = new MemoryStream(url.DownloadData("http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm"));
//以台灣銀行為範例

// 使用預設編碼讀入 HTML 
HtmlDocument doc = new HtmlDocument();
doc.Load(ms, Encoding.Default);

//取得現在的日期
Response.Write("現在時間:" + DateTime.Now + "
");
// 在Html內表示換行

// 取得匯率 
for(int x=3;x<=21;x++) 
{
    string txt1 = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/ul[1]/li[2]/center[1]/div[1]/div[2]/table[2]/tr[" + x + "]/td[1]").InnerText;
    string txt2 = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/ul[1]/li[2]/center[1]/div[1]/div[2]/table[2]/tr[" + x + "]/td[2]").InnerText;
    string txt3 = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/ul[1]/li[2]/center[1]/div[1]/div[2]/table[2]/tr[" + x + "]/td[3]").InnerText;
    string txt4 = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/ul[1]/li[2]/center[1]/div[1]/div[2]/table[2]/tr[" + x + "]/td[4]").InnerText;
    string txt5 = doc.DocumentNode.SelectSingleNode(@"/html[1]/body[1]/ul[1]/li[2]/center[1]/div[1]/div[2]/table[2]/tr[" + x + "]/td[5]").InnerText;
    string totle = string.Format("幣別:{0} ,買入現金匯率:{1} ,賣出即期匯率:{2} ,買入遠期匯率:{3} ,賣出歷史匯率:{4}", txt1, txt2, txt3, txt4, txt5);
    Response.Write(totle + "
");
}

//清除資料
doc = null;
url = null;
ms.Close();

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

http://htmlagilitypack.codeplex.com/ 
http://msdn.microsoft.com/zh-tw/evalcenter/ee787055.aspx


如何在ASP.NET中抓取來自於其他網站的資料 ?

http://enews.url.com.tw/enews/45768

類別功能
SocketWinsock 的基底類別, 可用來實作IPv4, IPv6的通訊協定。
TcpClient以 Winsock 實作的TCP用戶端。
UdpClient以 Winsock 實作的UDP用戶端。
TcpListener以 Winsock 實作的TCP伺服端。

抓取網頁下的所有的src


http://blog.xuite.net/yan.kee/CSharp/30330315-%E6%8A%93%E5%8F%96%E7%B6%B2%E9%A0%81%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%3Cimg%3E%E7%9A%84src

[Windows Phone/C#] C# 網頁擷取資料 解析網頁標籤(HTML Parser )API -HTML Agility Pack 以Windows Phone 8 為例

沒有留言: