C#抓取网页数据 解析标题描述图片等信息 去除HTML标签
C#抓取网页数据 解析标题描述图片等信息 去除HTML标签
发布时间:2016-12-28 来源:查字典编辑
摘要:一、首先将网页内容整个抓取下来,数据放在byte[]中(网络上传输时形式是byte),进一步转化为String,以便于对其操作,实例如下:复...

一、首先将网页内容整个抓取下来,数据放在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""'<>]*)[^<>]*?/", 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();

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类