2014年4月10日 星期四

[C#] 解析網頁 亂碼去去


  1. public static string GetInnerHtml(string url)
  2.     {
  3.         WebClient wc = new WebClient();
  4.         wc.Credentials = CredentialCache.DefaultCredentials;
  5.         byte[] htmlbuffer = wc.DownloadData(url);
  6.         Regex regex = new Regex("charset\\s*=\\s*[\\W]?\\s*([\\w-]+)", RegexOptions.IgnoreCase);
  7.  
  8.         string content = Encoding.Default.GetString(htmlbuffer);
  9.         Encoding encoding = Encoding.Default;
  10.         if (regex.IsMatch(content))
  11.         {
  12.             encoding = Encoding.GetEncoding(regex.Match(content).Groups[1].Value.Trim());
  13.             content = encoding.GetString(htmlbuffer);
  14.         }
  15.         else
  16.         {
  17.             content = Encoding.Default.GetString(htmlbuffer);
  18.         }
  19.         return content;
  20.     }

[C#] 擷取網頁 HTMLagailityPack


  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. using HtmlAgilityPack;
  7.  
  8. namespace agilitypack
  9. {
  10.     class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             HtmlWeb webClient = new HtmlWeb();
  15.             HtmlDocument doc = webClient.Load("http://msdn.microsoft.com/zh-tw/ee787055.aspx");
  16.  
  17.             HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("/html/body/div/div[2]/div/div/div[4]/div/div/h2[5]");
  18.  
  19.             foreach (HtmlNode node in nodes)
  20.             {
  21.                 Console.WriteLine(node.InnerText.Trim());
  22.             }
  23.  
  24.             doc = null;
  25.             nodes = null;
  26.             webClient = null;
  27.  
  28.             Console.WriteLine("Completed.");
  29.             Console.ReadLine();
  30.         }
  31.     }
  32. }

[C#] 測速用~~



  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.UI;
  6. using System.Web.UI.WebControls;
  7. using HtmlAgilityPack;
  8. using System.Net;
  9. using System.IO;
  10. using System.Threading;
  11. using System.Diagnostics;
  12.  
  13.  
  14. namespace NoSave.web
  15. {
  16.     public partial class Static : System.Web.UI.Page
  17.     {
  18.         protected void Page_Load(object sender, EventArgs e)
  19.         {
  20.  
  21.         }
  22.  
  23.      
  24.  
  25.         protected void btnAll_Click(object sender, EventArgs e)
  26.         {
  27.             //指定要抓取的網頁
  28.             string strURI = "http://tw.stock.yahoo.com/q/q?s=2002";
  29.  
  30.             //Agility
  31.             //----------------------------------
  32.             HtmlDocument hdoc = new HtmlDocument();
  33.  
  34.             HtmlWeb hw = new HtmlWeb();
  35.             //處理編碼問題
  36.             hw.AutoDetectEncoding = false;
  37.             hw.OverrideEncoding = System.Text.Encoding.Default;
  38.             Stopwatch stop_Agility = new Stopwatch();
  39.  
  40.             //計時開始
  41.             stop_Agility.Start();
  42.             hdoc = hw.Load(strURI);
  43.             stop_Agility.Stop();
  44.             //計時結束
  45.             TimeSpan ts = stop_Agility.Elapsed;            
  46.             string str_Agility=string.Format("{0:00}:{1:00}:{2:00}:{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
  47.  
  48.  
  49.             //WebRequest
  50.             //----------------------------------
  51.             System.Net.WebResponse response = null;
  52.             Stopwatch stop_WebRequest = new Stopwatch();
  53.  
  54.             //計時開始
  55.             stop_WebRequest.Start();
  56.             System.Net.WebRequest request = System.Net.WebRequest.Create(strURI);
  57.             response = request.GetResponse();
  58.             //計時結束
  59.             stop_WebRequest.Stop();
  60.  
  61.             ts = stop_WebRequest.Elapsed;
  62.             string str_WebRequest=string.Format("{0:00}:{1:00}:{2:00}:{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds /10);
  63.            
  64.  
  65.             //WebClient
  66.             //----------------------------------
  67.             Stopwatch stop_Client = new Stopwatch();
  68.  
  69.             //計時開始
  70.             stop_Client.Start();
  71.             WebClient client = new WebClient();
  72.             MemoryStream ms = new MemoryStream(client.DownloadData(strURI));
  73.             //計時結束
  74.             stop_Client.Stop();
  75.             ts = stop_Client.Elapsed;
  76.             string str_Client=string.Format("{0:00}:{1:00}:{2:00}:{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
  77.  
  78.  
  79.             //印出統計結果
  80.             Response.Write(string.Format("<br>Total:<br><table><tr><th align='right'>HtmlWeb.Load():</th><td>{0}</td></tr><tr><th align='right'>WebRequest.GetResponse():</th><td>{1}</td></tr><tr><th align='right'>WebClient.DownloadData():</th><td>{2}</td></tr></table", str_Agility, str_WebRequest, str_Client));
  81.  
  82.  
  83.         }
  84.     }
  85. }