程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#抓取網頁數據 解析標題描述圖片等信息 去除HTML標簽

C#抓取網頁數據 解析標題描述圖片等信息 去除HTML標簽

編輯:關於C語言

一、首先將網頁內容整個抓取下來,數據放在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();

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved