HtmlAgility 抓取網頁上的數據

来源:https://www.cnblogs.com/geovindu/archive/2020/03/06/12427358.html
-Advertisement-
Play Games

/// <summary> /// 財政部mca /// http://www.mca.gov.cn/article/sj/xzqh/1980/ /// https://github.com/zzzprojects/html-agility-pack /// https://github.com/l ...


 /// <summary>
    /// 財政部mca
    /// http://www.mca.gov.cn/article/sj/xzqh/1980/
    /// https://github.com/zzzprojects/html-agility-pack
    /// https://github.com/linezero/HtmlAgilityPack
    /// </summary>
    public partial class Form1 : Form
    {

        int codecell = 2;
        int namecell = 3;
        int yearnmae = 2019;
        string tableNo = "table";
        string trNo = "tr";
        string tdthNo = "th|td";
        DataTable  McaData()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("year", typeof(int)); //年份
            dt.Columns.Add("website", typeof(string)); //財政部網址
            dt.Columns.Add("codecell", typeof(int));  //行政區劃編碼在表格的第幾列
            dt.Columns.Add("namecell", typeof(int));  //行政區劃名稱在表格的第幾列
            dt.Columns.Add("tableNo", typeof(string));  //表格標識
            dt.Columns.Add("trNo", typeof(string));  //行標識
            dt.Columns.Add("tdthNo", typeof(string));  //列標識
            dt.Rows.Add(2019, "http://www.mca.gov.cn/article/sj/xzqh/1980/2019/202002281436.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2018, "http://www.mca.gov.cn/article/sj/xzqh/1980/201903/201903011447.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2017, "http://www.mca.gov.cn/article/sj/xzqh/1980/201803/201803131454.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2016, "http://www.mca.gov.cn/article/sj/xzqh/1980/201705/201705311652.html", 2, 3, "table//tbody", "tr", "th|td");//TBODY 都是大寫
            dt.Rows.Add(2015, "http://www.mca.gov.cn/article/sj/tjbz/a/2015/201706011127.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2014, "http://files2.mca.gov.cn/cws/201502/20150225163817214.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2013, "http://files2.mca.gov.cn/cws/201404/20140404125552372.htm", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2012, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201707271556.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2011, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201707271552.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2010, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220946.html", 2, 3, "table", "tr", "th|td");          
            dt.Rows.Add(2009, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220943.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2008, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220941.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2007, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220939.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2006, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220936.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2005, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220935.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2004, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220930.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2003, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220928.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2002, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220927.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2001, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220925.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(2000, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220923.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1999, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220921.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1998, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220918.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1997, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220916.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1996, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220914.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1995, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220913.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1994, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220911.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1993, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708041023.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1992, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220910.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1991, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708041020.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1990, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708041018.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1989, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708041017.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1988, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220903.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1987, "http://www.mca.gov.cn/article/sj/xzqh/1980/1980/201911180950.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1986, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220859.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1985, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220858.html", 2, 3, "table", "tr", "th|td");
            dt.Rows.Add(1984, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708220856.html", 1, 2, "table", "tr", "th|td");
            dt.Rows.Add(1983, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708160821.html", 1, 2, "table", "tr", "th|td");
            dt.Rows.Add(1982, "http://www.mca.gov.cn/article/sj/xzqh/1980/1980/201911180942.html", 1, 2, "table", "tr", "th|td");
            dt.Rows.Add(1981, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708041004.html", 1, 2, "table", "tr", "th|td");
            dt.Rows.Add(1980, "http://www.mca.gov.cn/article/sj/tjbz/a/201713/201708040959.html", 1, 2, "table", "tr", "th|td");
            return dt;
        }

        /// <summary>
        /// 
        /// </summary>
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {
            this.comboBox1.DataSource = McaData();
            this.comboBox1.DisplayMember = "year";
            this.comboBox1.ValueMember = "website";
        }
        /// <summary>
        /// 抓取數據
        /// Geovin Du 塗聚文
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                string website = this.comboBox1.SelectedValue.ToString();

                //codecell =(int)this.numericUpDown1.Value;
                //namecell = (int)this.numericUpDown2.Value;
                HtmlAgilityPack.HtmlWeb webClient = new HtmlAgilityPack.HtmlWeb();
                HtmlAgilityPack.HtmlDocument doc = webClient.Load(website);
                this.richTextBox1.Text = doc.Text.ToLower();
                //HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("/html[1]/body[1]/div[1]/div[2]/div[3]/div[2]/div[1]/div[1]/div[1]/div");
                //foreach (HtmlNode node in nodes)
                //{
                //    Console.WriteLine(node.InnerText.Trim());
                //}
                //nodes = null;

                yearnmae = int.Parse(this.comboBox1.Text);
                DataRow[] drsselect = McaData().Select("year="+yearnmae+"");
                for (int i = 0; i < drsselect.Length; i++)
                {

                    codecell =int.Parse(drsselect[i]["codecell"].ToString());
                    namecell= int.Parse(drsselect[i]["namecell"].ToString());
                    tableNo = drsselect[i]["tableNo"].ToString();
                    trNo = drsselect[i]["trNo"].ToString();
                    tdthNo = drsselect[i]["tdthNo"].ToString();
                }


                List<AreaInfo> list = new List<AreaInfo>();
                foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//"+tableNo))
                {
                    //Console.WriteLine("Found: " + table.Id);
                    AreaInfo info = null;
                    
                    foreach (HtmlNode rows in table.SelectNodes(trNo))
                    {
                        info = new AreaInfo();
                        int cell = 1;                        
                        foreach (HtmlNode cells in rows.SelectNodes(tdthNo))
                        {                            
                            if(cell==codecell)
                            {
                                info.AreaCode = cells.InnerText.Trim().Replace(" ", "").Trim(); 
      
                            }
                            if(cell==namecell)
                            {
                                info.AreaName = cells.InnerText.Trim().Replace(" ", "").Trim();

                            }                           
                            cell++;
                        }
                        if(!string.IsNullOrEmpty(info.AreaCode))
                        { 
                           list.Add(info);
                        }
                    }
                }


                doc = null;
                webClient = null;
                this.bindingSource1.DataSource = list;
                this.bindingNavigator1.BindingSource = this.bindingSource1;
                this.dataGridView1.DataSource = this.bindingSource1;
            }
            catch(Exception ex)
            {

                ex.Message.ToString();
            }
            

        }

  


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

-Advertisement-
Play Games
更多相關文章
  • Java自身UI界面太醜怎麼辦?通過以下代碼就可以將Java應用程式GUI設置成Windows風格: 設置前: 設置後: ...
  • 本文章為本人原創,適合於剛入坑C語言,對於指針的定義和用法模糊不清的同學,如有不正,請各位指出。 從根本來說,指針變數也是變數,只是int變成了int *,以此類推。只不過指針變數裡面放的內容是普通變數在存儲空間的地址(某種奇怪的16進位地址格式,感興趣可自行百度) 定義指針變數的格式:int/do ...
  • 記錄 編碼約定 學習過程。 命名空間約定 如果沒有使用using指令,項目也沒有預設導入合適的命名空間,訪問這些命名空間或者類型時,則需要“完全限定名稱”。 namespace ConsoleApp4 { class Program { static void Main(string[] args) ...
  • 除基於屬性的動畫系統外,WPF提供了一種創建基於幀的動畫的方法,這種方法只使用代碼。需要做的全部工作是響應靜態的CompositionTarge.Rendering事件,觸發該事件是為了給每幀獲取內容。這是一種非常低級的方法,除非使用標準的基於屬性的動畫模型不能滿足需要(例如,構建簡單的側邊滾動游戲 ...
  • 事件的基本使用 聲明一個事件很簡單,只需在聲明一個委托對象時加上event關鍵字就行。如下: public delegate void PriceChangedHandler (decimal oldPrice, decimal newPrice);public class IPhone6 { pu ...
  • 如果要擴展LINQ查詢方法集,只需要為IEnumerable<T>擴展方法。 第一種:擴展聚合方法,類似已有的Max、Min,可以給具體類型擴展,也可以給泛型擴展。 using System; using System.Collections; using System.Collections.Ge ...
  • 場景:動態庫UFileDev(運行時版本v4.0.30319)內置方法調用了動態庫ICSharpCode.SharpZipLib(運行時版本v2.0.50727)。調用動態庫UFileDev過程中一直報錯如下: Pre-bind state information LOG: DisplayName ...
  • 前言 Linq 是 C# 中一個非常好用的集合處理庫,用好了能幫我們簡化大量又臭又長的嵌套迴圈,使處理邏輯清晰可見。EF 查詢主要也是依賴 Linq。但是 Linq 相對 sql 也存在一些缺點,最主要的就是動態構造查詢的難度。sql 只需要簡單進行字元串拼接,操作難度很低(當然出錯也相當容易),而 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...