C#抓取网页数据 解析标题描述图片等信息 去除HTML标签

一、首先将网页内容整个抓取下来,数据放在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(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""']?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""'<>]*)[^<>]*?/?[\s\t\r\n]*>", 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("<", "&lt;");

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

    return strOutput;

}

有些例外会使得去除不干净,所以建议连续两次转化。这样将Html标签转化为了空格。太多连续的空格会影响之后对字符串的操作。所以再加入这样的语句:


//把所有空格变为一个空格

Regex r = new Regex(@"\s+");

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

wordsOnly.Trim();

声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。