国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

介紹C#解析HTML的兩種方法

開發 后端
在搜索引擎的開發中,我們需要對Html進行解析。本文介紹C#解析HTML的兩種方法。

在搜索引擎的開發中,我們需要對網頁的Html內容進行檢索,難免的就需要對Html進行解析。拆分每一個節點并且獲取節點間的內容。此文介紹兩種C#解析Html的方法。

C#解析Html的第一種方法:

用System.Net.WebClient下載Web Page存到本地文件或者String中,用正則表達式來分析。這個方法可以用在Web Crawler等需要分析很多Web Page的應用中。

估計這也是大家最直接,最容易想到的一個方法。

轉自網上的一個實例:所有的href都抽取出來:

  1. using System;  
  2. using System.Net;  
  3. using System.Text;  
  4. using System.Text.RegularExpressions;  
  5. namespace HttpGet  
  6. {  
  7.     class Class1  
  8.     {  
  9.         [STAThread]  
  10.         static void Main(string[] args)  
  11.         {  
  12.             System.Net.WebClient client = new WebClient();  
  13.             byte[] page = client.DownloadData("http://www.google.com");  
  14.             string content = System.Text.Encoding.UTF8.GetString(page);  
  15.             string regex = "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']";  
  16.             Regex re = new Regex(regex);  
  17.             MatchCollection matches = re.Matches(content);  
  18.  
  19.             System.Collections.IEnumerator enu = matches.GetEnumerator();  
  20.             while (enu.MoveNext() && enu.Current != null)  
  21.             {  
  22.                 Match match = (Match)(enu.Current);  
  23.                 Console.Write(match.Value + "\r\n");  
  24.             }  
  25.         }  
  26.     }  

一些爬蟲的HTML解析中也是用的類似的方法。

C#解析Html的第二種方法:

利用Winista.Htmlparser.Net 解析Html。這是.NET平臺下解析Html的開源代碼,網上有源碼下載,百度一下就能搜到,這里就不提供了。并且有英文的幫助文檔。找不到的留下郵箱。

個人認為這是.net平臺下解析html不錯的解決方案,基本上能夠滿足我們對html的解析工作。

自己做了個實例:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.ComponentModel;  
  4. using System.Data;  
  5. using System.Drawing;  
  6. using System.Linq;  
  7. using System.Text;  
  8. using System.Windows.Forms;  
  9. using Winista.Text.HtmlParser;  
  10. using Winista.Text.HtmlParser.Lex;  
  11. using Winista.Text.HtmlParser.Util;  
  12. using Winista.Text.HtmlParser.Tags;  
  13. using Winista.Text.HtmlParser.Filters;  
  14.  
  15.  
  16. namespace HTMLParser  
  17. {  
  18.     public partial class Form1 : Form  
  19.     {  
  20.         public Form1()  
  21.         {  
  22.             InitializeComponent();  
  23.             AddUrl();  
  24.         }  
  25.  
  26.         private void btnParser_Click(object sender, EventArgs e)  
  27.         {  
  28.             #region 獲得網頁的html  
  29.             try 
  30.             {  
  31.  
  32.                 txtHtmlWhole.Text = "";  
  33.                 string url = CBUrl.SelectedItem.ToString().Trim();  
  34.                 System.Net.WebClient aWebClient = new System.Net.WebClient();  
  35.                 aWebClient.Encoding = System.Text.Encoding.Default;  
  36.                 string html = aWebClient.DownloadString(url);  
  37.                 txtHtmlWhole.Text = html;  
  38.             }  
  39.             catch (Exception ex)  
  40.             {  
  41.                 MessageBox.Show(ex.Message);  
  42.             }  
  43.             #endregion  
  44.  
  45.             #region 分析網頁html節點  
  46.             Lexer lexer = new Lexer(this.txtHtmlWhole.Text);  
  47.             Parser parser = new Parser(lexer);  
  48.             NodeList htmlNodes = parser.Parse(null);  
  49.             this.treeView1.Nodes.Clear();  
  50.             this.treeView1.Nodes.Add("root");  
  51.             TreeNode treeRoot = this.treeView1.Nodes[0];  
  52.             for (int i = 0; i <  htmlNodes.Count; i++)  
  53.             {  
  54.                 this.RecursionHtmlNode(treeRoot, htmlNodes[i], false);  
  55.             }  
  56.  
  57.             #endregion  
  58.  
  59.         }  
  60.  
  61.         private void RecursionHtmlNode(TreeNode treeNode, INode htmlNode, bool siblingRequired)  
  62.         {  
  63.             if (htmlNode == null || treeNode == nullreturn;  
  64.  
  65.             TreeNode current = treeNode;  
  66.             TreeNode content ;  
  67.             //current node  
  68.             if (htmlNode is ITag)  
  69.             {  
  70.                 ITag tag = (htmlNode as ITag);  
  71.                 if (!tag.IsEndTag())  
  72.                 {  
  73.                     string nodeString = tag.TagName;  
  74.                     if (tag.Attributes != null && tag.Attributes.Count > 0)  
  75.                     {  
  76.                         if (tag.Attributes["ID"] != null)  
  77.                         {  
  78.                             nodeString = nodeString + " { id=\"" + tag.Attributes["ID"].ToString() + "\" }";  
  79.                         }  
  80.                         if (tag.Attributes["HREF"] != null)  
  81.                         {  
  82.                             nodeString = nodeString + " { href=\"" + tag.Attributes["HREF"].ToString() + "\" }";  
  83.                         }  
  84.                     }  
  85.                       
  86.                     current = new TreeNode(nodeString);  
  87.                     treeNode.Nodes.Add(current);  
  88.                 }  
  89.             }  
  90.  
  91.             //獲取節點間的內容  
  92.             if (htmlNode.Children != null && htmlNode.Children.Count > 0)  
  93.             {  
  94.                 this.RecursionHtmlNode(current, htmlNode.FirstChild, true);  
  95.                 content = new TreeNode(htmlNode.FirstChild.GetText());  
  96.                 treeNode.Nodes.Add(content);  
  97.             }  
  98.  
  99.             //the sibling nodes  
  100.             if (siblingRequired)  
  101.             {  
  102.                 INode sibling = htmlNode.NextSibling;  
  103.                 while (sibling != null)  
  104.                 {  
  105.                     this.RecursionHtmlNode(treeNode, sibling, false);  
  106.                     sibling = sibling.NextSibling;  
  107.                 }  
  108.             }  
  109.         }  
  110.         private void AddUrl()  
  111.         {  
  112.             CBUrl.Items.Add("http://www.hao123.com");  
  113.             CBUrl.Items.Add("http://www.sina.com");  
  114.             CBUrl.Items.Add("http://www.heuet.edu.cn");  
  115.         }  
  116.  
  117.           
  118.  
  119.     }  

運行效果:

運行效果 

實現取來很容易,結合Winista.Htmlparser源碼很快就可以實現想要的效果。

小結:

簡單介紹了兩種C#解析Html的的方法,大家有什么其他好的方法還望指教。

【編輯推薦】

  1. 解密C#-SQLite是如何移植的
  2. 看看如何透過JavaScript調用C#函數
  3. 淺析C#事件注冊和注銷
  4. 示例:C#通過AMO對象瀏覽SQL SERVER 2005 SSAS
  5. C#隱藏窗口的幾種方法
責任編輯:book05 來源: cnblogs
相關推薦

2009-08-05 13:34:18

C#日期相減

2009-08-17 08:29:00

c#刪除指定文件

2009-08-21 18:02:41

C#快捷鍵

2009-08-25 11:35:27

C#連接數據庫

2010-06-17 12:48:05

livecd 修復Gr

2009-08-17 17:48:00

C#自定義鼠標樣式

2009-08-03 17:53:11

XML數據

2010-08-04 17:41:52

掛載NFS

2009-06-17 17:37:43

Java隨機數

2009-12-07 13:42:24

WCF框架

2010-04-13 09:50:44

Oracle跟蹤

2011-03-30 17:04:24

MySQL添加用戶

2010-11-24 14:36:25

修復mysql表

2009-09-25 14:04:09

Hibernate eHibernate h

2011-05-24 09:18:59

C++連接mysql數據庫

2011-04-25 09:53:31

C++mysql

2010-02-06 14:35:36

ibmdwRUP迭代

2010-09-07 11:18:10

2009-06-18 11:09:42

2010-09-09 19:53:50

點贊
收藏

51CTO技術棧公眾號

麻豆91蜜桃| 色婷婷激情综合| 成人网18免费网站在线| 国内精品免费**视频| 每日更新av在线播放| 亚洲自拍另类欧美丝袜| 2018中文字幕第一页| 国产精品久久久久久| 奇米四色中文综合久久| 欧美日韩va| 亚洲一区二区三区自拍| www国产精品内射老熟女| 亚洲精品第一国产综合野| www.日本一区| 午夜精品久久久久| 色久视频在线观看| 亚洲欧美国产精品va在线观看| 国产欧美日韩一区二区三区| 国产精品一区在线观看乱码 | 国产裸体舞一区二区三区| 日韩一二三区在线观看| 欧美国产精品一区二区三区| 国产欧美精品日韩精品| 亚洲欧美一区二区三区| 一区二区在线观看免费视频播放| 国产精品日韩一区二区| 六九午夜精品视频| 欧美日韩另类在线| 国产淫片免费看| 久草在线资源站手机版| 国产专区综合网| 色一情一乱一乱一91av| 国产日韩精品在线播放| av电影院在线看| 国产亚洲综合色| 中国一区二区三区| 日韩欧美电影| 久久亚洲影音av资源网| 欧美猛男同性videos| 亚洲精品天堂成人片av在线播放| 国产在线日韩欧美| 一区二区三区偷拍| 夜夜嗨av一区二区三区网站四季av| 日本高清不卡一区二区三| 日本大胆欧美| 欧美日韩亚洲综合一区二区三区激情在线| 日韩电影在线免费看| 国产精品无码专区在线观看| 永久亚洲成a人片777777| 成年人午夜久久久| 欧美成人免费一级人片100| 精品在线亚洲视频| 奇米一区二区| 狠狠干 狠狠操| 一区二区三区av电影| 免费无码不卡视频在线观看| 麻豆国产91在线播放| 中文字幕日本最新乱码视频| 欧美日韩视频不卡| 1024成人| 91超碰在线电影| 日韩二区三区| 天天操天天色综合| 国产综合视频一区二区三区免费| 色先锋久久av资源部| av网站免费在线观看| 亚洲欧美激情一区| jizz国产精品| 91精品在线看| 国产精品女主播一区二区三区| 日本a级片久久久| 国产成人精品免费| 中文字幕av专区| 欧美性极品xxxx娇小| 欧美猛烈性xbxbxbxb| 亚洲免费视频观看| av综合网址| www久久99| 国产白丝精品91爽爽久久| 在线观看免费视频高清游戏推荐 | 色综合天天性综合| 91福利国产在线观看菠萝蜜| 自拍亚洲一区欧美另类| 欧美日韩爱爱| 四虎一区二区| 久久日一线二线三线suv| 午夜精品久久久久久久四虎美女版| 亚洲一区中文字幕| 免费成人美女在线观看.| 成人在线观看a| 色播五月激情综合网| 性欧美freehd18| 国产成人精品综合久久久| 日本不卡视频在线| ·天天天天操| 亚洲成av人影院在线观看| 啪啪激情综合网| 午夜免费电影一区在线观看| 国产成人高清| 欧一区二区三区| www.男人天堂网| 头脑特工队2免费完整版在线观看| 在线观看国产精品网站| 三级成人在线| 91精品国产综合久久男男| 蜜臀久久99精品久久久久宅男| 四虎av网址| 欧美精品一区二区久久久| 老牛国内精品亚洲成av人片| 欧美三级华人主播| 亚洲欧美日韩久久精品| 久草在线资源福利站| 亚洲mm色国产网站| 26uuu欧美日本| 1024在线播放| 国产精品99久久久久久人| 国产成人在线电影| 黄网站视频在线观看| 国产精品h在线观看| proumb性欧美在线观看| 久操视频在线| 国产激情久久久| 不卡大黄网站免费看| 免费大片在线观看www| 国产成人免费av电影| 免费理论片在线观看播放老| 久久99国内精品| 日本一区高清| 91精品国产91久久| 高清成人在线观看| 日本高清在线观看视频| 91人成网站www| 亚洲欧美在线aaa| 日韩久久一区| 国产经典久久久| 日韩欧美国产一区在线观看| 欧美日本在线| 欧美hdfree性xxxx| 琪琪第一精品导航| 国产亚洲欧洲一区高清在线观看| 亚洲妇女成熟| 国产精品久久久久7777按摩 | 国产馆精品极品| 欧美人与性动交α欧美精品图片| 97视频在线观看网址| 亚洲青青青在线视频| 日韩影视高清在线观看| 欧美一区亚洲| 日韩一级片播放| 色七七影院综合| 国产精一品亚洲二区在线视频| 欧美日韩视频在线播放| 成人免费视频网站入口| 欧美日韩在线观看视频| 老司机在线精品视频| 中文字幕国内自拍| 欧美国产日韩xxxxx| 国产三级精品三级在线专区| 欧美极品在线| 欧美日韩亚洲一| 成人444kkkk在线观看| 99久久777色| 国产精品**亚洲精品| 久久久久久免费看| 日韩在线观看免费全集电视剧网站| 国产一区二区三区毛片| 精品一二三四在线| 日韩深夜视频| 欧美国产综合在线| 日韩中文在线不卡| 国产亚洲一区二区三区在线观看 | 日韩av片网站| 久久理论片午夜琪琪电影网| 国产精品久久久久久久久果冻传媒 | 欧美性少妇18aaaa视频| 91精品国产乱码久久久久久| 日本高清中文字幕二区在线| 国产精品一区二| 日韩免费电影一区| 国产一区二区看久久| 在线免费观看亚洲| 二区视频在线| 7777奇米亚洲综合久久| 91麻豆精品国产自产在线观看一区| 一本色道久久综合| а√在线中文网新版地址在线| 亚洲高潮无码久久| 久久99精品久久久久久琪琪 | 国产精品小仙女| 成人精品三级| 性生活免费在线观看| 97se亚洲国产综合自在线不卡| 日本美女高潮视频| 国产91网红主播在线观看| 亚洲777理论| 亚洲九九精品| 蜜桃成人精品| 成色在线视频| 欧美视频观看一区| 久热精品视频在线|