C# .Net如何获取网站源代码,去除HTML标记和空格!

转载 2008年09月29日 10:42:00

转载:http://hi.baidu.com/trip008/blog/item/b5b805f5a6283c21bd310908.html

 

由于自己的搜索引擎中做到了这一块内容,所以今天说说如何抓取网页数据、分析并且去除Html标签,给大家提供一个参考。我的平台是Visual Studio2005,C#

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

       首先将网页内容整个抓取下来,这个我就不说了,不是本次话题的重点。假设抓取的数据放在RecvBuffer这个byte[]中(数据从网络上传输过来时不是字符串的形式而是byte),那么我们的第一步就是将RecvBuffer转化为String,以便于对其操作,实例如下:

None.gif   // 将接收到的数据增加到响应字符串中

None.gif   strResponse += Encoding.ASCII.GetString(RecvBuffer, 0, nBytes);

       strResponse即是保存数据的字符串,此处用系统自带的System.Text.Encoding的方法转化RecvBuffer,GetString的第一个参数RecvBuffer就是我们的原始数据,即包含需要解码的字节序列的字节数组;第二个参数0代表第一个要解码的字节的索引,一般就从0开始;第三个参数nBytes为要解码的字节数,可以自己调整。

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

None.gif   // 解析页面,查找链接

None.gif   // 此处尚需扩展,还有某些形式的链接不被识别

None.gif   string strRef = @"(href|HREF|src|SRC|action|ACTION|Action)[ ]*=[ ]*[""'][^""'#>]+[""']";

None.gif   MatchCollection matches = new Regex(strRef).Matches(strResponse);

None.gif   strStatus += "找到: "+matches.Count+" 个链接/r/n";

       上面的例子将网页中的链接解析出来,strRef变量表示了正则表达式的模式,变量matches表示符合匹配的项目的集合,后面的Regex(strRef).Matches(strResponse)就是创建正则规则使得strResponse里符合strRef模式的字符串都返回。然后调用matches的变量就可以取得各种信息了。

       当然,这里只能识别一些基本的链接形式,像script中的链接和一些不带“”的链接都没有被支持,这个的扩展还是蛮简单的。

       再举几个更简单点的解析的例子,大家学习学习:

None.gif   //获取标题

None.gif   Match TitleMatch = Regex.Match(strResponse, "<title>([^<]*)</title>", RegexOptions.IgnoreCase | RegexOptions.Multiline);

None.gif   title = TitleMatch.Groups[1].Value;

None.gif

None.gif   //获取描述信息

None.gif   Match Desc = Regex.Match(strResponse, "<Meta name=/"DESCRIPTION/" content=/"([^<]*)/">", RegexOptions.IgnoreCase | RegexOptions.Multiline);

None.gif   strdesc = Desc.Groups[1].Value;

None.gif

None.gif   //获取网页的大小

None.gif   size = strResponse.Length;

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

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

ExpandedBlockStart.gifContractedBlock.gif   /**//// <summary>

InBlock.gif   /// 将Html标签转化为空格

InBlock.gif   /// </summary>

InBlock.gif   /// <param name="strHtml">待转化的字符串</param>

ExpandedBlockEnd.gif   /// <returns>经过转化的字符串</returns>

None.gif   private string stripHtml(string strHtml)

ExpandedBlockStart.gifContractedBlock.gif  dot.gif{

InBlock.gif      Regex objRegExp = new Regex("<(.|/n)+?>");

InBlock.gif      string strOutput = objRegExp.Replace(strHtml, "");

InBlock.gif      strOutput = strOutput.Replace("<", "&lt;");

InBlock.gif      strOutput = strOutput.Replace(">", "&gt;");

InBlock.gif      return strOutput;

ExpandedBlockEnd.gif   }

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

None.gif   //把所有空格变为一个空格

None.gif   Regex r = new Regex(@"/s+");

None.gif   wordsOnly = r.Replace(strResponse, " ");

None.gif   wordsOnly.Trim();

       好了,大功告成,这里的wordsOnly便是我们最终的成果----去除了Html标签,并去除了多余空格的字符串。

       希望对大家有用!

C# .Net使用正则表达式去除HTML标记和空格

using System.Text.RegularExpressions; 在进行数据采集,显示文章摘要,内容计数等情况下,需要清除源代码中的html标签,空格,style,script等标签. ...
  • atco
  • atco
  • 2012年02月24日 11:25
  • 6001

实用的php清除html,php去除空格与换行,php清除空白行和换行,提取页面纯文本

实用的php清除html,换行,空格类,php去除空格与换行,php清除空白行和换行,提取页面纯文本内容 方法一: function DeleteHtml($str) { $str...
  • zhunana520
  • zhunana520
  • 2015年09月21日 16:43
  • 2700

去掉html标签和所有空格

去掉html标签和所有空格
  • CODER_V
  • CODER_V
  • 2017年01月17日 10:06
  • 366

C#中除去所有在HTML元素中标记

/// 除去所有在HTML元素中标记  public static string StripHTML(string strHtml)  {   string strOutput=strHtml;   ...
  • JOHNCOOLS
  • JOHNCOOLS
  • 2006年05月01日 13:36
  • 1287

如何去除html代码标签之间换行产生的空格

参考链接:5种方法去掉HTML中Inline-Block元素之间的空白 推荐方法:在父元素上设置font-size: 0; 例: Document ...
  • microcosmv
  • microcosmv
  • 2016年10月10日 10:54
  • 5934

C# 正则表达式,去除所有HTML标签

protected string str = "sdasasdsddsdsaaassss 说是道 ";     protected void Page_Load(object sender, E...
  • liwateryi
  • liwateryi
  • 2015年03月01日 16:58
  • 1699

C#过滤换行符和多余空格

Baidu网页的HTML源代码是混合在一起的。HTML代码混合在一起,出发点是为了减小网页体积,从而加快网页加载速度。 在asp.net编程时,页面只要继承这个基类,那么输出的HTML代码就会自动去掉...
  • luming666
  • luming666
  • 2016年10月08日 14:38
  • 1425

asp.net中去除字符串中的所有空格字符

方法一、最常用的就是Replace函数      string str = "str=1 3 45. 7 8 9 0 5"; Response.Write(str.Repl...
  • taomanman
  • taomanman
  • 2011年08月17日 15:26
  • 4095

asp.net页面过滤所有换行符和多余空格

不知道大家注意到了没有,Google和Baidu网页的HTML源代码是混合在一起的。HTML代码混合在一起,出发点是为了减小网页体积,从而加快网页加载速度。       写个函数把网页HTML源...
  • my98800
  • my98800
  • 2017年07月24日 08:07
  • 216

ASP.NET 去除字符串html样式标签

 public string StripHT(string strHtml)     {         Regex regex = new Regex("", RegexOptions.I...
  • yygzs2012
  • yygzs2012
  • 2017年03月10日 15:13
  • 162
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# .Net如何获取网站源代码,去除HTML标记和空格!
举报原因:
原因补充:

(最多只允许输入30个字)