使用C#获取网页HTML源码的例子

最近在做一个项目,其中一个功能是根据一个URL地址,获取到网页的源代码。在ASP.NET(C#)中,获取网页源代码貌似有很多种方法,我随便搞了一个简单的WebClient,非常简单容易。但后面一个非常恼火的问题出来了,那就是中文的乱码。

通过仔细研究,中文的网页不外乎GB2312和UTF-8这两种编码。于是有了下面这段代码:

代码如下:

/// <summary>
       /// 根据网址的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创建了一个wc对象(这命名有点尴尬了)。然后调用wc对象的DownloadData方法,传入URL值,返回一个字节数组。默认使用GB2312来读取这个字节数组,把它转换成字符串。从网页源代码的字符串中查找网页的编码格式的特征字符,如找到charset="utf-8"这样的信息,来判断当前网页的编码格式。

GetCharset这个函数就是来获取当前网页的编码格式的,具体代码如下:

代码如下:

/// <summary>
       /// 从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;
       }

感觉写得不是很好,先将就着用,呵呵。小编原创,转载注明,呵呵。

(0)

相关推荐

  • C#将html table 导出成excel实例

    复制代码 代码如下: public void ProcessRequest (HttpContext context) { string elxStr = "<table><tbody><tr><td>1</td><td>11</td></tr><tr><td>2</td><td>22</td></tr></tbody>

  • asp.net(C#) 动态添加非ASP的标准html控件(如添加Script标签)

    复制代码 代码如下: HtmlGenericControl Include2 = new HtmlGenericControl("script"); Include2.Attributes.Add("type", "text/javascript"); Include2.InnerHtml = "alert('JavaScript in Page Header');"; this.Page.Header.Controls.Ad

  • C#导出生成excel文件的方法小结(xml,html方式)

    直接贴上代码,里面都有注释 复制代码 代码如下: /// <summary> /// xml格式生成excel文件并存盘;        /// </summary>        /// <param name="page">生成报表的页面,没有传null</param>        /// <param name="dt">数据表</param>        /// <param

  • C#正则表达式匹配HTML中的图片路径,图片地址代码

    一般来说一个 HTML 文档有很多标签,比如"<html>"."<body>"."<table>"等,想把文档中的 img 标签提取出来并不是一件容易的事.由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易.于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 img 标签.我们可以从 HTML 标签的格式去想应该怎么建这个正则表达式.首先要想一下 img

  • C#获取HTML文本的第一张图片与截取内容摘要示例代码

    获取第一张图片 要我们获得到的数据是一段HTML文本.也许这段文本里面有许多图片.需要截取一张作为标题图片.也就是做为主图.这时就可以用到下面这个方法获取到第一张图片. 示例代码 #region 获取第一张图片 /// <summary> /// 获取HTML文本的图片地址 /// </summary> /// <param name="content"></param> /// <returns></returns&g

  • ASP.net(c#) 生成html的几种解决方案[思路]第1/2页

    方案1:  复制代码 代码如下: /// <summary > /// 传入URL返回网页的html代码 /// </summary > /// <param name="Url" >URL </param > /// <returns > </returns > public static string getUrltoHtml(string Url) { errorMsg = ""; try

  • c#中过滤html的正则表达式

    实现代码 /// <summary> /// 去除HTML标记 /// </summary> /// <param name="NoHTML">包括HTML的源码 </param> /// <returns>已经去除后的文字</returns> public static string NoHTML(string Htmlstring) { //删除脚本 Htmlstring = Regex.Replace(Htm

  • C#下解析HTML的两种方法介绍

    在搜索引擎的开发中,我们需要对Html进行解析.本文介绍C#解析HTML的两种方法.AD: 在搜索引擎的开发中,我们需要对网页的Html内容进行检索,难免的就需要对Html进行解析.拆分每一个节点并且获取节点间的内容.此文介绍两种C#解析Html的方法. C#解析Html的第一种方法:用System.Net.WebClient下载Web Page存到本地文件或者String中,用正则表达式来分析.这个方法可以用在Web Crawler等需要分析很多Web Page的应用中.估计这也是大家最直接,

  • C#实现将HTML转换成纯文本的方法

    本文实例讲述了C#实现将HTML转换成纯文本的方法.分享给大家供大家参考.具体如下: 使用方法: 复制代码 代码如下: HtmlToText convert = new HtmlToText(); textBox2.Text = convert.Convert(textBox1.Text); C#代码如下: /// <summary> /// Converts HTML to plain text. /// </summary> class HtmlToText { // Stat

  • C#实现下载网页HTML源码的方法

    本文实例讲述了C#实现下载网页HTML源码的方法.分享给大家供大家参考之用.具体方法如下: public static class DownLoad_HTML { private static int FailCount = 0; //记录下载失败的次数 public static string GetHtml(string url) //传入要下载的网址 { string str = string.Empty; try { System.Net.WebRequest request = Sys

随机推荐