使用C#获取网页HTML源码的例子
最近在做一个项目,其中一个功能是根据一个URL地址,获取到网页的源代码。在ASP.NET(C#)中,获取网页源代码貌似有很多种方法,我随便搞了一个简单的WebClient,非常简单容易。但后面一个非常恼火的问题出来了,那就是中文的乱码。
通过仔细研究,中文的网页不外乎GB2312和UTF-8这两种编码。于是有了下面这段代码:
///<summary>
///根据网址的URL,获取源代码HTML
///</summary>
///<paramname="url"></param>
///<returns></returns>
publicstaticstringGetHtmlByUrl(stringurl)
{
using(WebClientwc=newWebClient())
{
try
{
wc.UseDefaultCredentials=true;
wc.Proxy=newWebProxy();
wc.Proxy.Credentials=CredentialCache.DefaultCredentials;
wc.Credentials=System.Net.CredentialCache.DefaultCredentials;
byte[]bt=wc.DownloadData(url);
stringtxt=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;
}
returntxt;
}
catch(Exceptionex)
{
returnnull;
}
}
}
稍微解释一下,这里使用了WebClient创建了一个wc对象(这命名有点尴尬了)。然后调用wc对象的DownloadData方法,传入URL值,返回一个字节数组。默认使用GB2312来读取这个字节数组,把它转换成字符串。从网页源代码的字符串中查找网页的编码格式的特征字符,如找到charset="utf-8"这样的信息,来判断当前网页的编码格式。
GetCharset这个函数就是来获取当前网页的编码格式的,具体代码如下:
///<summary>
///从HTML中获取获取charset
///</summary>
///<paramname="html"></param>
///<returns></returns>
publicstaticstringGetCharset(stringhtml)
{
stringcharset="";
RegexregCharset=newRegex(@"content=[""'].*\s*charset\b\s*=\s*""?(?<charset>[^""']*)",RegexOptions.IgnoreCase);
if(regCharset.IsMatch(html))
{
charset=regCharset.Match(html).Groups["charset"].Value;
}
if(charset.Equals(""))
{
regCharset=newRegex(@"<\s*meta\s*charset\s*=\s*[""']?(?<charset>[^""']*)",RegexOptions.IgnoreCase);
if(regCharset.IsMatch(html))
{
charset=regCharset.Match(html).Groups["charset"].Value;
}
}
returncharset;
}
感觉写得不是很好,先将就着用,呵呵。小编原创,转载注明,呵呵。