使用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; }
感觉写得不是很好,先将就着用,呵呵。小编原创,转载注明,呵呵。