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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介:

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

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

       strResponse即是保存数据的字符串,此处用系统自带的System.Text.Encoding的方法转化RecvBuffer,GetString的第一个参数RecvBuffer就是我们的原始数据,即包含需要解码的字节序列的字节数组;第二个参数0代表第一个要解码的字节的索引,一般就从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

欢迎大家加入!!!

分类:  C# Asp.net

本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/archive/2009/04/25/1443526.html,如需转载请自行联系原作者
相关文章
|
7天前
|
存储 JavaScript 前端开发
用HTML DOM实现有条件地渲染网页元素(下)
用HTML DOM实现有条件地渲染网页元素(下)
|
7天前
|
JavaScript 前端开发 容器
用HTML DOM实现有条件地渲染网页元素(上)
用HTML DOM实现有条件地渲染网页元素(上)
|
11天前
|
前端开发
前端基础(二)_HTML常用标签(块级标签、行级标签、行块级标签)
本文详细介绍了HTML中的常用标签,包括块级标签(如`h1`至`h6`、`p`、`div`等)、行级标签(如`span`、`b`、`strong`、`i`、`em`、`sub`、`sup`、`del`、`a`等),以及行块级标签(如`img`)。文章解释了这些标签的用途、特点和基本用法,并通过示例代码展示了如何在HTML文档中使用它们。
43 1
|
11天前
|
移动开发 开发者 UED
HTML5中video标签controlslist属性的使用方法
`controlsList`属性为开发者提供了更多控制HTML5视频播放器行为的能力,让视频内容的集成更加灵活和符合需求。通过精心设计的控制列表,可以提升用户体验,同时保持内容的安全性和专业性。这种细节的控制和定制能力是现代Web开发的一个重要方面,反映了HTML5对开发者和内容创作者需求的响应。
19 1
|
12天前
|
存储 JavaScript Java
使用NekoHTML解析HTML并提取META标签内容
关于NekoHTML的代码样例,这里提供一个简单的示例,用于展示如何使用NekoHTML来解析HTML文档并提取其中的信息。请注意,由于NekoHTML的具体实现和API可能会随着版本更新而有所变化,以下代码仅供参考。 ### 示例:使用NekoHTML解析HTML并提取META标签内容 ```java import org.cyberneko.html.parsers.DOMParser; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml
|
12天前
|
XML JavaScript Java
NekoHTML 是一个基于Java的HTML扫描器和标签补全器
**NekoHTML** 是一个基于Java的HTML扫描器和标签补全器(tag balancer),由J. Andrew Clark开发。它主要用于解析HTML文档,并能够“修正”许多在编写HTML文档过程中常犯的错误,如增补缺失的父元素、自动用结束标签关闭相应的元素,以及处理不匹配的内嵌元素标签等。这使得程序能够以标准的XML接口来访问HTML文档中的信息。 ### NekoHTML的主要特点包括: 1. **错误修正**:能够自动修正HTML中的常见错误,如未闭合的标签等。 2. **DOM树生成**:将HTML源代码转化为DOM(Document Object Model)结构,便
|
12天前
|
JavaScript 前端开发
react字符串转为dom标签,类似于Vue中的v-html
本文介绍了在React中将字符串转换为DOM标签的方法,类似于Vue中的`v-html`指令,通过使用`dangerouslySetInnerHTML`属性实现。
25 0
react字符串转为dom标签,类似于Vue中的v-html
|
25天前
|
存储 C# 开发者
枚举与结构体的应用:C#中的数据组织艺术
在C#编程中,枚举(`enum`)和结构体(`struct`)是非常重要的数据类型。枚举用于定义命名常量集合,提高代码可读性;结构体则封装相关数据字段,适合小型数据集。本文从基本概念入手,探讨它们的使用技巧、常见问题及解决方案,帮助开发者更好地利用这些特性构建健壮的应用程序。
24 8
|
27天前
|
搜索推荐 SEO
HTML中各种标题标签的正确使用方法及其特点
在HTML中,标题标签(`&lt;h1&gt;`至`&lt;h6&gt;`)用于定义文档的标题结构。`&lt;h1&gt;`表示主标题,每个页面应只有一个;`&lt;h2&gt;`至`&lt;h6&gt;`分别表示不同层级的子标题,可用于细分内容。正确使用这些标签不仅有助于文档的层次分明和可读性提升,还能优化SEO。使用时需注意保持层级结构连续、内容描述清晰。
|
8天前
|
移动开发 前端开发 数据挖掘
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图