C#抓取网页数据 解析标题描述图片等信息 去除HTML标签
发布时间:2020-12-15 06:40:34 所属栏目:百科 来源:网络整理
导读:一、首先将网页内容整个抓取下来,数据放在byte[]中(网络上传输时形式是byte),进一步转化为String,以便于对其操作,实例如下: 复制代码 代码如下: private static string GetPageData(string url) { if (url == null || url.Trim() == "") return null;
一、首先将网页内容整个抓取下来,数据放在byte[]中(网络上传输时形式是byte),进一步转化为String,以便于对其操作,实例如下: 复制代码 代码如下: private static string GetPageData(string url) { if (url == null || url.Trim() == "") return null; WebClient wc = new WebClient(); wc.Credentials = CredentialCache.DefaultCredentials; Byte[] pageData = wc.DownloadData(url); return Encoding.Default.GetString(pageData);//.ASCII.GetString } 二、得到了数据的字符串形式,然后可以对网页进行解析了(其实就是对字符串的各种操作和正则表达式的应用): 常用的的解析还有以下几种: 1.获取标题 复制代码 代码如下: Match TitleMatch = Regex.Match(strResponse,"<title>([^<]*)</title>",RegexOptions.IgnoreCase | RegexOptions.Multiline); title = TitleMatch.Groups[1].Value; 2.获取描述信息 复制代码 代码如下: Match Desc = Regex.Match(strResponse,"<meta name="DESCRIPTION" content="([^<]*)">",RegexOptions.IgnoreCase | RegexOptions.Multiline); strdesc = Desc.Groups[1].Value; 3.获取图片 复制代码 代码如下: public class HtmlHelper { /// <summary> /// HTML中提取图片地址 /// </summary> public static List<string> PickupImgUrl(string html) { Regex regImg = new Regex(@"<imgb[^<>]*?bsrc[strn]*=[strn]*[""']?[strn]*(?<imgUrl>[^strn""'<>]*)[^<>]*?/?[strn]*>",RegexOptions.IgnoreCase); MatchCollection matches = regImg.Matches(html); List<string> lstImg = new List<string>(); foreach (Match match in matches) { lstImg.Add(match.Groups["imgUrl"].Value); } return lstImg; } /// <summary> /// HTML中提取图片地址 /// </summary> public static string PickupImgUrlFirst(string html) { List<string> lstImg = PickupImgUrl(html); return lstImg.Count == 0 ? string.Empty : lstImg[0]; } } 4.去除Html标签 复制代码 代码如下: private string StripHtml(string strHtml) { Regex objRegExp = new Regex("<(.|n)+?>"); string strOutput = objRegExp.Replace(strHtml,""); strOutput = strOutput.Replace("<","<"); strOutput = strOutput.Replace(">",">"); return strOutput; } 有些例外会使得去除不干净,所以建议连续两次转化。这样将Html标签转化为了空格。太多连续的空格会影响之后对字符串的操作。所以再加入这样的语句: 复制代码 代码如下: //把所有空格变为一个空格 Regex r = new Regex(@"s+"); wordsOnly = r.Replace(strResponse," "); wordsOnly.Trim(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |