.NET 解析HTML代碼——NSoup

来源:http://www.cnblogs.com/doforfuture/archive/2016/08/02/5730619.html
-Advertisement-
Play Games

NSoup是一個開源框架,是JSoup(Java)的.NET移植版本 1、直接用起來 NSoup的強大之處在於可以用類似js的方法來獲取節點元素 通過元素類型獲取元素GetElementByTag("p") 2、做了一個winform的小demo 關鍵代碼: 下麵以提取一個html代碼中211大學名 ...


NSoup是一個開源框架,是JSoup(Java)的.NET移植版本

1、直接用起來

NSoup.Nodes.Document htmlDoc = NSoup.NSoupClient.Parse(HTMLString);       //無需實例化

 

NSoup的強大之處在於可以用類似js的方法來獲取節點元素

 

通過元素類型獲取元素GetElementByTag("p")

NSoup.Select.Elements ele= htmlDoc.GetElementsByTag(TbTag.Text);
foreach (var item in ele)
{
if (item.Attr("class") == "col-sm-4 col-xs-6 listtit1")   //通過Attr(""href)可以獲取元素的屬性
{
   sb.AppendLine(item.Text());     //通過Text()方法可以獲取元素中的文本內容
}
}

 

2、做了一個winform的小demo

關鍵代碼:

 下麵以提取一個html代碼中211大學名和地點的為例:

        private void GetHtml_Click(object sender, EventArgs e)
        {
            //獲取指定地址的Html代碼
            TbCode.Text = "";
            string url = TbUrl.Text.Trim();
            WebClient client = new WebClient();
            client.Encoding = System.Text.Encoding.UTF8;
            string html = client.DownloadString(url);
            TbCode.Text = html;
        }

        private void Analysis_Click(object sender, EventArgs e)
        {
            NSoup.Nodes.Document htmlDoc = NSoup.NSoupClient.Parse(TbCode.Text);
            NSoup.Select.Elements ele= htmlDoc.GetElementsByTag(TbTag.Text);
            System.Text.StringBuilder sb=new StringBuilder();
            foreach (var item in ele)
            {
                sb.AppendLine(item.Text());
                foreach (var item1 in item.NextElementSibling.Children)
                {
                    if (item1.Attr("class") == "col-sm-4 col-xs-6 listtit1")
                    {
                        sb.AppendLine(item1.Text());
                    }
                }
            }
            TbElement.Text = sb.ToString();
        }

 

html代碼片段(因篇幅原因未貼全):

<h4>安徽</h4>
<ul class="list-unstyled clearfix">
    <li class="col-sm-4 col-xs-6 listtit1"><a href="/daxue/detail/detail3712.html">合肥工業大學</a></li>
    <li class="col-sm-4 col-xs-6 listtit1"><a href="/daxue/detail/detail3715.html">中國科學技術大學</a></li>
    <li class="col-sm-4 col-xs-6 listtit1"><a href="/daxue/detail/detail3716.html">安徽大學</a></li>
</ul>

 

效果(標簽類型h4):

 

3、插入資料庫代碼示例(提取專業名和編號):

private void BtnInsert_Click(object sender, EventArgs e)
        {
            NSoup.Nodes.Document htmlDoc = NSoup.NSoupClient.Parse(TbCode.Text);
            NSoup.Select.Elements eles = htmlDoc.GetElementsByTag(TbTag.Text);

            string connectionString = @"這裡是連接字元串";

            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                conn.Open();
                foreach (var item in eles)
                {
                    if (item.Attr("width") == "20%" && item.NextElementSibling 
              != null && item.Text().Length > 4) { string sql = "insert into Major (mId,mName) values
                      ('
" +item.Text() + "','" + item.NextElementSibling.Text() + "')"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.ExecuteNonQuery(); } } } conn.Close(); } }

 

Html代碼片段:

<table class="cla" border="0" cellspacing="1" cellpadding="0" width="100%" bgcolor="#dedede">
        <tbody>
          <tr class="scon">
        <
td bgcolor="#ffffff" width="20%"><strong>0101</strong></td>
        <
td bgcolor="#ffffff" height="30"><strong>哲學類</strong></td>
      </
tr> <tr><td bgcolor="#ffffff" width="20%">010101</td>
        <
td bgcolor="#ffffff" height="30"><span class="pl20">哲學</span></td></tr> <tr><td bgcolor="#ffffff" width="20%">010102</td>
        <
td bgcolor="#ffffff" height="30"><span class="pl20">邏輯學</span></td></tr> <tr><td bgcolor="#ffffff" width="20%">010103K</td>
        <
td bgcolor="#ffffff" height="30"><span class="pl20">宗教學</span></td></tr> </tbody> </table>

 

方法有很多種,就不一一列舉了,可以多試幾種,當然熟悉Python的朋友就不必這麼麻煩了,Python有更專業的html解析器,有時間可以瞭解一下


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 使用場景 來著stackorverflow controls concurrent access to a shared resource. access to the resource will be requested from multiple, disparate parts of t ...
  • 適用於: 本文適用於有一定微信開發基礎的用戶 引言: 花了300大洋申請了微信公眾平臺後,發現不能使用微信公眾號登錄網站(非微信打開)獲得微信帳號。仔細研究後才發現還要再花300大洋申請微信開放平臺才能接入網站的登錄。於是做為屌絲程式員的我想到了自己做一個登錄介面。 工具和環境: 1. VS2013 ...
  • 策略一:資料庫不存在時重新創建資料庫 Database.SetInitializer<testContext>(new CreateDatabaseIfNotExists<testContext>()); Database.SetInitializer<testContext>(new Create ...
  • 較之傳統通過App.config和Web.config這兩個XML文件承載的配置系統,.NET Core採用的這個全新的配置模型的最大一個優勢就是針對多種不同配置源的支持。我們可以將記憶體變數、命令行參數、環境變數和物理文件作為原始配置數據的來源,如果採用物理文件作為配置源,我們可以選擇不同的格式(比... ...
  • 今天大家在群里大家非常熱鬧的討論像畫筆一樣慢慢畫出Path的這種效果該如何實現. 北京-LGL 博客號@ligl007發起了這個話題.然後各路高手踴躍發表意見.最後雷叔 上海-雷蒙 博客號@雷蒙之星 以一種巧妙的思路實現了這個效果 使大家受益匪淺 本來這篇博客應該由雷叔來寫的,奈何雷叔忙著寫教材,就 ...
  • 比如:要實現 http://localhost:60291/home/geta/1212.html 或者 .abc 任意擴展名 完成兩步即可。 第一步修改路由: 第二步:修改web.config 增加 <system.webServer>節點 增加如下: <modules runAllManaged ...
  • `dotnet pack` 命令生成項目並創建 NuGet 包。這個操作的結果是兩個 `nupkg` 擴展名的包。一個包含代碼,另一個包含調試符號。 該項目被依賴的 NuGet 包裝被添加到 nuspec 文件,因此,他們能夠在安裝包時得到解決。 ...
  • 1. 按照官方頁面進行安裝 https://www.microsoft.com/net/core#macos 2. 在運行"brew link --force openssl" 時會出錯,這是一個known issue,可以先跳過此步驟,進行下一步,安裝.NET Core SDK 3. 然後參考此頁 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...