在搜索引擎的开发中,我们需要对Html进行解析。本文介绍C#解析HTML的两种方法。
AD:
在搜索引擎的开发中,我们需要对网页的Html内容进行检索,难免的就需要对Html进行解析。拆分每一个节点并且获取节点间的内容。此文介绍两种C#解析Html的方法。
C#解析Html的第一种方法:
用System.Net.WebClient下载Web Page存到本地文件或者String中,用正则表达式来分析。这个方法可以用在Web Crawler等需要分析很多Web Page的应用中。
估计这也是大家最直接,最容易想到的一个方法。
转自网上的一个实例:所有的href都抽取出来:
using System; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace HttpGet { class Class1 { [STAThread] static void Main(string[] args) { System.Net.WebClient client = new WebClient(); byte[] page = client.DownloadData("http://www.google.com"); string content = System.Text.Encoding.UTF8.GetString(page); string regex = "href=[\\\"\\\'](http:\\/\\/|\\.\\/|\\/)?\\w+(\\.\\w+)*(\\/\\w+(\\.\\w+)?)*(\\/|\\?\\w*=\\w*(&\\w*=\\w*)*)?[\\\"\\\']"; Regex re = new Regex(regex); MatchCollection matches = re.Matches(content); System.Collections.IEnumerator enu = matches.GetEnumerator(); while (enu.MoveNext() && enu.Current != null) { Match match = (Match)(enu.Current); Console.Write(match.Value + "\r\n"); } } } }
C#解析Html的第二种方法:
利用Winista.Htmlparser.Net 解析Html。这是.NET平台下解析Html的开源代码,网上有源码下载,百度一下就能搜到,这里就不提供了。并且有英文的帮助文档。找不到的留下邮箱。
个人认为这是.net平台下解析html不错的解决方案,基本上能够满足我们对html的解析工作。
自己做了个实例:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Winista.Text.HtmlParser; using Winista.Text.HtmlParser.Lex; using Winista.Text.HtmlParser.Util; using Winista.Text.HtmlParser.Tags; using Winista.Text.HtmlParser.Filters; namespace HTMLParser { public partial class Form1 : Form { public Form1() { InitializeComponent(); AddUrl(); } private void btnParser_Click(object sender, EventArgs e) { #region 获得网页的html try { txtHtmlWhole.Text = ""; string url = CBUrl.SelectedItem.ToString().Trim(); System.Net.WebClient aWebClient = new System.Net.WebClient(); aWebClient.Encoding = System.Text.Encoding.Default; string html = aWebClient.DownloadString(url); txtHtmlWhole.Text = html; } catch (Exception ex) { MessageBox.Show(ex.Message); } #endregion #region 分析网页html节点 Lexer lexer = new Lexer(this.txtHtmlWhole.Text); Parser parser = new Parser(lexer); NodeList htmlNodes = parser.Parse(null); this.treeView1.Nodes.Clear(); this.treeView1.Nodes.Add("root"); TreeNode treeRoot = this.treeView1.Nodes[0]; for (int i = 0; i < htmlNodes.Count; i++) { this.RecursionHtmlNode(treeRoot, htmlNodes[i], false); } #endregion } private void RecursionHtmlNode(TreeNode treeNode, INode htmlNode, bool siblingRequired) { if (htmlNode == null || treeNode == null) return; TreeNode current = treeNode; TreeNode content ; //current node if (htmlNode is ITag) { ITag tag = (htmlNode as ITag); if (!tag.IsEndTag()) { string nodeString = tag.TagName; if (tag.Attributes != null && tag.Attributes.Count > 0) { if (tag.Attributes["ID"] != null) { nodeString = nodeString + " { id=\"" + tag.Attributes["ID"].ToString() + "\" }"; } if (tag.Attributes["HREF"] != null) { nodeString = nodeString + " { href=\"" + tag.Attributes["HREF"].ToString() + "\" }"; } } current = new TreeNode(nodeString); treeNode.Nodes.Add(current); } } //获取节点间的内容 if (htmlNode.Children != null && htmlNode.Children.Count > 0) { this.RecursionHtmlNode(current, htmlNode.FirstChild, true); content = new TreeNode(htmlNode.FirstChild.GetText()); treeNode.Nodes.Add(content); } //the sibling nodes if (siblingRequired) { INode sibling = htmlNode.NextSibling; while (sibling != null) { this.RecursionHtmlNode(treeNode, sibling, false); sibling = sibling.NextSibling; } } } private void AddUrl() { CBUrl.Items.Add("http://www.hao123.com"); CBUrl.Items.Add("http://www.sina.com"); CBUrl.Items.Add("http://www.heuet.edu.cn"); } } }
运行效果:
实现取来很容易,结合Winista.Htmlparser源码很快就可以实现想要的效果。
小结:
简单介绍了两种C#解析Html的的方法,大家有什么其他好的方法还望指教。
更多C# で HTML を解析する 2 つの方法の紹介相关文章请关注PHP中文网!

C#と.NETは、強力な機能と効率的な開発環境を提供します。 1)C#は、CのパワーとJavaのシンプルさを組み合わせた最新のオブジェクト指向プログラミング言語です。 2).NETフレームワークは、複数のプログラミング言語をサポートするアプリケーションを構築および実行するためのプラットフォームです。 3)C#のクラスとオブジェクトは、オブジェクト指向プログラミングの中核です。クラスはデータと動作を定義し、オブジェクトはクラスのインスタンスです。 4).NETのゴミ収集メカニズムは、開発者の作業を簡素化するためにメモリを自動的に管理します。 5)C#および.NETは、同期および非同期プログラミングをサポートする強力なファイル操作関数を提供します。 6)一般的なエラーは、デバッガー、ロギング、例外処理を通じて解決できます。 7)パフォーマンスの最適化とベストプラクティスには、StringBuildの使用が含まれます

.NetFrameworkは、一貫したプログラミングモデルと強力なランタイム環境を提供する、クロス言語のクロスプラットフォーム開発プラットフォームです。 1)メモリとスレッドを管理するCLRとFCLで構成され、FCLは事前に構築された機能を提供します。 2)使用の例には、読み取りファイルとLINQクエリが含まれます。 3)一般的なエラーには、未処理の例外とメモリリークが含まれ、デバッグツールを使用して解決する必要があります。 4)パフォーマンスの最適化は、非同期プログラミングとキャッシュを通じて実現でき、コードの読みやすさと保守性を維持することが重要です。

C#.NETが永続的に魅力的なままである理由には、その優れたパフォーマンス、リッチエコシステム、強力なコミュニティサポート、クロスプラットフォーム開発機能が含まれます。 1)優れたパフォーマンスであり、エンタープライズレベルのアプリケーションとゲーム開発に適しています。 2).NETフレームワークは、さまざまな開発分野をサポートするための幅広いクラスライブラリとツールを提供します。 3)アクティブな開発者コミュニティと豊富な学習リソースがあります。 4).NetCoreは、クロスプラットフォーム開発を実現し、アプリケーションシナリオを拡張します。

C#.NETの設計パターンには、Singletonパターンと依存関係の注入が含まれます。 1.シングルトンモードは、クラスに1つのインスタンスしかないことを保証します。これは、グローバルアクセスポイントが必要なシナリオに適していますが、安全性と虐待の問題をスレッドすることに注意する必要があります。 2。依存関係の噴射により、依存関係を注入することにより、コードの柔軟性とテスト可能性が向上します。多くの場合、コンストラクターの注入に使用されますが、複雑さを高めるために過度の使用を避ける必要があります。

C#.NETは、ゲーム開発、金融サービス、モノのインターネット、クラウドコンピューティングの分野で現代世界で広く使用されています。 1)ゲーム開発では、C#を使用してUnityエンジンを介してプログラムします。 2)金融サービスの分野では、C#.NETが高性能取引システムとデータ分析ツールの開発に使用されます。 3)IoTおよびクラウドコンピューティングに関して、C#.NETはAzure Servicesを通じてサポートを提供して、デバイス制御ロジックとデータ処理を開発します。

.NETFRAMEWORKISWINDOWS-CENTRIC、while.netcore/5/6supportscross-platformdevelopment.1).netframework、2002年以来、isidealforwindowsprimitedincross-platformcapabilities.2).netcore、andtseverutions(andtseverutions(andtseverution)

C#.NET開発者コミュニティは、次のような豊富なリソースとサポートを提供します。1。Microsoftの公式文書、2。StackoverflowやRedditなどのコミュニティフォーラム、3。Githubのオープンソースプロジェクト。これらのリソースは、開発者が基本的な学習から高度なアプリケーションまでプログラミングスキルを向上させるのに役立ちます。

C#.NETの利点には以下が含まれます。1)非同期プログラミングなどの言語機能により、開発が簡素化されます。 2)パフォーマンスと信頼性、JITコンピレーションとゴミ収集メカニズムによる効率の向上。 3)クロスプラットフォームサポート、.NetCoreはアプリケーションシナリオを拡張します。 4)Webからデスクトップ、ゲーム開発までの優れたパフォーマンスを備えた幅広い実用的なアプリケーション。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Dreamweaver Mac版
ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
