使用C#獲取網(wǎng)頁(yè)HTML源碼的例子
最近在做一個(gè)項(xiàng)目,其中一個(gè)功能是根據(jù)一個(gè)URL地址,獲取到網(wǎng)頁(yè)的源代碼。在ASP.NET(C#)中,獲取網(wǎng)頁(yè)源代碼貌似有很多種方法,我隨便搞了一個(gè)簡(jiǎn)單的WebClient,非常簡(jiǎn)單容易。但后面一個(gè)非常惱火的問題出來(lái)了,那就是中文的亂碼。
通過仔細(xì)研究,中文的網(wǎng)頁(yè)不外乎GB2312和UTF-8這兩種編碼。于是有了下面這段代碼:
/// <summary>
/// 根據(jù)網(wǎng)址的URL,獲取源代碼HTML
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static string GetHtmlByUrl(string url)
{
using (WebClient wc = new WebClient())
{
try
{
wc.UseDefaultCredentials = true;
wc.Proxy = new WebProxy();
wc.Proxy.Credentials = CredentialCache.DefaultCredentials;
wc.Credentials = System.Net.CredentialCache.DefaultCredentials;
byte[] bt = wc.DownloadData(url);
string txt = System.Text.Encoding.GetEncoding("GB2312").GetString(bt);
switch (GetCharset(txt).ToUpper())
{
case "UTF-8":
txt = System.Text.Encoding.UTF8.GetString(bt);
break;
case "UNICODE":
txt = System.Text.Encoding.Unicode.GetString(bt);
break;
default:
break;
}
return txt;
}
catch (Exception ex)
{
return null;
}
}
}
稍微解釋一下,這里使用了WebClient創(chuàng)建了一個(gè)wc對(duì)象(這命名有點(diǎn)尷尬了)。然后調(diào)用wc對(duì)象的DownloadData方法,傳入U(xiǎn)RL值,返回一個(gè)字節(jié)數(shù)組。默認(rèn)使用GB2312來(lái)讀取這個(gè)字節(jié)數(shù)組,把它轉(zhuǎn)換成字符串。從網(wǎng)頁(yè)源代碼的字符串中查找網(wǎng)頁(yè)的編碼格式的特征字符,如找到charset="utf-8"這樣的信息,來(lái)判斷當(dāng)前網(wǎng)頁(yè)的編碼格式。
GetCharset這個(gè)函數(shù)就是來(lái)獲取當(dāng)前網(wǎng)頁(yè)的編碼格式的,具體代碼如下:
/// 從HTML中獲取獲取charset
/// </summary>
/// <param name="html"></param>
/// <returns></returns>
public static string GetCharset(string html)
{
string charset = "";
Regex regCharset = new Regex(@"content=[""'].*\s*charset\b\s*=\s*""?(?<charset>[^""']*)", RegexOptions.IgnoreCase);
if (regCharset.IsMatch(html))
{
charset = regCharset.Match(html).Groups["charset"].Value;
}
if (charset.Equals(""))
{
regCharset = new Regex(@"<\s*meta\s*charset\s*=\s*[""']?(?<charset>[^""']*)", RegexOptions.IgnoreCase);
if (regCharset.IsMatch(html))
{
charset = regCharset.Match(html).Groups["charset"].Value;
}
}
return charset;
}
感覺寫得不是很好,先將就著用,呵呵。小編原創(chuàng),轉(zhuǎn)載注明,呵呵。
- C#實(shí)現(xiàn)將HTML轉(zhuǎn)換成純文本的方法
- ASP.net(c#) 生成html的幾種解決方案[思路]
- C#將html table 導(dǎo)出成excel實(shí)例
- C#下解析HTML的兩種方法介紹
- asp.net(C#) 動(dòng)態(tài)添加非ASP的標(biāo)準(zhǔn)html控件(如添加Script標(biāo)簽)
- C#導(dǎo)出生成excel文件的方法小結(jié)(xml,html方式)
- c#中過濾html的正則表達(dá)式
- C#正則表達(dá)式匹配HTML中的圖片路徑,圖片地址代碼
- C#實(shí)現(xiàn)下載網(wǎng)頁(yè)HTML源碼的方法
- C#獲取HTML文本的第一張圖片與截取內(nèi)容摘要示例代碼
相關(guān)文章
C#使用Socket實(shí)現(xiàn)本地多人聊天室
這篇文章主要為大家詳細(xì)介紹了C#使用Socket實(shí)現(xiàn)本地多人聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02C#使用ICSharpCode.SharpZipLib.dll進(jìn)行文件的壓縮與解壓功能
這篇文章主要介紹了C#使用ICSharpCode.SharpZipLib.dll進(jìn)行文件的壓縮與解壓功能,需要的朋友可以參考下2017-12-12C#實(shí)現(xiàn)的SN快速輸入工具實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)的SN快速輸入工具,以實(shí)例的形式詳細(xì)講述了C#實(shí)現(xiàn)序列號(hào)快速輸入的方法,是非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11C#實(shí)現(xiàn)將商品金額小寫轉(zhuǎn)換成大寫的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將商品金額小寫轉(zhuǎn)換成大寫的方法,涉及C#數(shù)組與字符串的相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08DevExpress的DateEdit設(shè)置顯示日期和時(shí)間的方法
本文主要介紹了DevExpress的DateEdit設(shè)置顯示日期和時(shí)間的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08C#實(shí)現(xiàn)PDF簽名時(shí)添加時(shí)間戳的2種方法(附VB.NET代碼)
在PDF添加簽名時(shí),支持添加可信時(shí)間戳來(lái)保證文檔的法律效應(yīng)。本文,將通過C#程序代碼介紹如何添加可信時(shí)間戳,可通過2種方法來(lái)實(shí)現(xiàn)。感興趣的可以了解一下2021-05-05