如何分析网页数据并且去除Html标签(C#)

      首先将网页内容整个抓取下来,这个我就不说了,不是本次话题的重点。假设抓取的数据放在RecvBuffer这个byte[]中(数据从网络上传输过来时不是字符串的形式而是byte),那么我们的第一步就是将RecvBuffer转化为String,以便于对其操作,实例如下:
       strResponse即是保存数据的字符串,此处用系统自带的System.Text.Encoding的方法转化RecvBuffer,GetString的第一个参数RecvBuffer就是我们的原始数据,即包含需要解码的字节序列的字节数组;第二个参数0代表第一个要解码的字节的索引,一般就从0开始;第三个参数nBytes为要解码的字节数,可以自己调整。

       得到了数据的字符串形式,然后可以对网页进行解析了(其实就是对字符串的各种操作和正则表达式的应用)。下面我以几个例子来说明对网页数据的解析:

   // 将接收到的数据增加到响应字符串中
   strResponse += Encoding.ASCII.GetString(RecvBuffer, 0 , nBytes);

 

   // 解析页面,查找链接
  
// 此处尚需扩展,还有某些形式的链接不被识别
   string strRef = @" (href|HREF|src|SRC|action|ACTION|Action)[ ]*=[ ]*[""'][^""'#>]+[""'] " ;
   MatchCollection matches
= new Regex(strRef).Matches(strResponse);
   strStatus
+= " 找到: " + matches.Count + " 个链接/r/n " ;

       上面的例子将网页中的链接解析出来,strRef变量表示了正则表达式的模式,变量matches表示符合匹配的项目的集合,后面的Regex(strRef).Matches(strResponse)就是创建正则规则使得strResponse里符合strRef模式的字符串都返回。然后调用matches的变量就可以取得各种信息了。
       当然,这里只能识别一些基本的链接形式,像script中的链接和一些不带“”的链接都没有被支持,这个的扩展还是蛮简单的。
       再举几个更简单点的解析的例子,大家学习学习:

   // 获取标题
   Match TitleMatch = Regex.Match(strResponse, " <title>([^<]*)</title> " , RegexOptions.IgnoreCase | RegexOptions.Multiline);
   title
= TitleMatch.Groups[ 1 ].Value;

  
// 获取描述信息
   Match Desc = Regex.Match(strResponse, " <Meta name=/ " DESCRIPTION/ " content=/ " ([ ^< ] * )/ " > " , RegexOptions.IgnoreCase | RegexOptions.Multiline);
   strdesc
= Desc.Groups[ 1 ].Value;

  
// 获取网页的大小
   size = strResponse.Length;


—————————————————————割—————————————————————————

       好了,下面说一下如何去除Html标签,这个想必有很多初学者很需要。其实还是正则表达式和字符串基本操作的应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:

   /**/ /// <summary>
  
/// 将Html标签转化为空格
  
/// </summary>
  
/// <param name="strHtml">待转化的字符串</param>
  
/// <returns>经过转化的字符串</returns>
   private string stripHtml( string strHtml)
  
{
      Regex objRegExp
= new Regex("<(.|/n)+?>");
     
string strOutput = objRegExp.Replace(strHtml, "");
      strOutput
= strOutput.Replace("<", "&lt;");
      strOutput
= strOutput.Replace(">", "&gt;");
     
return strOutput;
   }

       ok,这样一来Html标签就基本没了,但是有些例外会使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实是将Html标签转化为了空格。太多连续的空格会影响之后对字符串的操作。所以再加入这样的语句:

   // 把所有空格变为一个空格
   Regex r = new Regex( @" /s+ " );
   wordsOnly
= r.Replace(strResponse, " " );
   wordsOnly.Trim();

 

.Net 技术探讨群 4151320

欢迎大家加入!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值