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

如题所述

// 将接收到的数据增加到响应字符串中 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;—————————————————————割—————————————————————————///<summary> /// 将Html标签转化为空格///</summary> ///<param name="strHtml">待转化的字符串</param> ///<returns>经过转化的字符串</returns> privatestring stripHtml(string strHtml){Regex objRegExp =new Regex("<(.|\n)+?>");string strOutput = objRegExp.Replace(strHtml, "");strOutput = strOutput.Replace("<", "<");strOutput = strOutput.Replace(">", "");return strOutput;} ok,这样一来Html标签就基本没了,但是有些例外会使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实是将Html标签转化为了空格。太多连续的空格会影响之后对字符串的操作。所以再加入这样的语句://把所有空格变为一个空格 Regex r =new Regex(@"\s+");
温馨提示:答案为网友推荐,仅供参考