C#抓取網(wǎng)頁(yè)數(shù)據(jù) 解析標(biāo)題描述圖片等信息 去除HTML標(biāo)簽
一、首先將網(wǎng)頁(yè)內(nèi)容整個(gè)抓取下來(lái),數(shù)據(jù)放在byte[]中(網(wǎng)絡(luò)上傳輸時(shí)形式是byte),進(jìn)一步轉(zhuǎn)化為String,以便于對(duì)其操作,實(shí)例如下:
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
}
二、得到了數(shù)據(jù)的字符串形式,然后可以對(duì)網(wǎng)頁(yè)進(jìn)行解析了(其實(shí)就是對(duì)字符串的各種操作和正則表達(dá)式的應(yīng)用):
常用的的解析還有以下幾種:
1.獲取標(biāo)題
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標(biāo)簽
private string StripHtml(string strHtml)
{
Regex objRegExp = new Regex("<(.|\n)+?>");
string strOutput = objRegExp.Replace(strHtml, "");
strOutput = strOutput.Replace("<", "<");
strOutput = strOutput.Replace(">", ">");
return strOutput;
}
有些例外會(huì)使得去除不干凈,所以建議連續(xù)兩次轉(zhuǎn)化。這樣將Html標(biāo)簽轉(zhuǎn)化為了空格。太多連續(xù)的空格會(huì)影響之后對(duì)字符串的操作。所以再加入這樣的語(yǔ)句:
//把所有空格變?yōu)橐粋€(gè)空格
Regex r = new Regex(@"\s+");
wordsOnly = r.Replace(strResponse, " ");
wordsOnly.Trim();
- c#使用htmlagilitypack解析html格式字符串
- C#自寫(xiě)的一個(gè)HTML解析類(lèi)(類(lèi)似XElement語(yǔ)法)
- c#使用nsoup解析html亂碼解決方法分享 nsoup教程
- C#下解析HTML的兩種方法介紹
- C# 使用 WebBrowser 實(shí)現(xiàn) HTML 轉(zhuǎn)圖片功能的示例代碼
- 利用C#代碼將html樣式文件與Word文檔互換的方法
- C#正則過(guò)濾HTML標(biāo)簽并保留指定標(biāo)簽的方法
- C#基于正則表達(dá)式抓取a標(biāo)簽鏈接和innerhtml的方法
- 通過(guò)C#實(shí)現(xiàn)發(fā)送自定義的html格式郵件
- c# 使用HtmlAgilityPack解析Html
相關(guān)文章
利用C#開(kāi)發(fā)瀏覽器擴(kuò)展的全過(guò)程記錄
做web開(kāi)發(fā)的同學(xué),經(jīng)常會(huì)用到各種chrome瀏覽器插件,那么我們寄幾怎么開(kāi)發(fā)一個(gè)插件呢(其實(shí)是瀏覽器擴(kuò)展)?這篇文章主要給大家介紹了關(guān)于利用C#開(kāi)發(fā)瀏覽器擴(kuò)展的相關(guān)資料,需要的朋友可以參考下2021-07-07
C#在后臺(tái)運(yùn)行操作(BackgroundWorker用法)示例分享
BackgroundWorker類(lèi)允許在單獨(dú)的專(zhuān)用線(xiàn)程上運(yùn)行操作。如果需要能進(jìn)行響應(yīng)的用戶(hù)界面,而且面臨與這類(lèi)操作相關(guān)的長(zhǎng)時(shí)間延遲,則可以使用BackgroundWorker類(lèi)方便地解決問(wèn)題,下面看示例2013-12-12
C# winform點(diǎn)擊生成二維碼實(shí)例代碼
這篇文章主要介紹了 C# winform點(diǎn)擊生成二維碼實(shí)例代碼,需要的朋友可以參考下2017-04-04
C#將HashTable中鍵列表或值列表復(fù)制到一維數(shù)組的方法
這篇文章主要介紹了C#將HashTable中鍵列表或值列表復(fù)制到一維數(shù)組中方法,涉及C#操作HashTable的相關(guān)技巧,需要的朋友可以參考下2015-04-04
C# 系統(tǒng)全局的異常處理實(shí)現(xiàn)
在C#應(yīng)用程序中,異??赡茉谌魏蔚胤桨l(fā)生,本文主要介紹了C# 系統(tǒng)全局的異常處理實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Unity實(shí)現(xiàn)植物識(shí)別示例詳解
這篇文章主要介紹了如何通過(guò)Unity接入百度AI實(shí)現(xiàn)植物識(shí)別,接口返回植物的名稱(chēng),并支持獲取識(shí)別結(jié)果對(duì)應(yīng)的百科信息。感興趣的可以了解一下2022-01-01
C# out關(guān)鍵詞的應(yīng)用實(shí)例
下面小編就為大家分享一篇C# out關(guān)鍵詞的應(yīng)用實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12

