当前位置: 移动技术网 > IT编程>开发语言>c# > C#抓取网页数据 解析标题描述图片等信息 去除HTML标签

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

2019年07月18日  | 移动技术网IT编程  | 我要评论

一、首先将网页内容整个抓取下来,数据放在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("<", "<");
    stroutput = stroutput.replace(">", ">");
    return stroutput;
}

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

复制代码 代码如下:

//把所有空格变为一个空格
regex r = new regex(@"\s+");
wordsonly = r.replace(strresponse, " ");
wordsonly.trim();

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网