C#抓取网页数据 解析标题描述图片等信息 去除HTML标签
程序员文章站
2022-06-03 13:00:50
一、首先将网页内容整个抓取下来,数据放在byte[]中(网络上传输时形式是byte),进一步转化为string,以便于对其操作,实例如下:
复制代码 代码如下:
pri...
一、首先将网页内容整个抓取下来,数据放在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();
上一篇: 前端Electron新手入门教程详解
下一篇: Vue.js 图标选择组件实践详解