2023年3月4日 星期六

[C#] 爬蟲台積電股價

 這段程式碼是使用C#語言和HtmlAgilityPack套件,以爬蟲方式從台灣證券交易所網站(https://www.twse.com.tw/)取得某股票代號的股價資料,並將其儲存成一個字串。


首先,程式碼宣告了要查詢的股票代號為2330,然後組成查詢網址url。接著,使用HtmlAgilityPack套件建立了一個BrowsingContext物件,並透過OpenAsync方法開啟查詢網址所指向的網頁,取得了網頁的Html文檔。接著,程式碼使用QuerySelector方法取得網頁中的table元素,透過這個元素可以取得網頁上顯示的股價資料表格。然後,使用table.Rows取得表格中所有的列,逐一遍歷每一列,再逐一取得每一列中的欄位資料,將其拼接成字串。


最後,經過迴圈的處理,stockStr字串便會儲存下來查詢到的股價資料。你可以將這段程式碼複製到Visual Studio或其他開發環境中,進行編譯運行,看看程式碼的實際效果。但需要注意,網頁中的Html結構可能會變化,可能需要根據實際的網頁結構做些許的修改,才能獲得正確的結果。



using System;
using System.Windows.Forms;
using AngleSharp;//使用angleSharp套件
using AngleSharp.Dom;
using AngleSharp.Html.Dom;
namespace ProjectOfTesting
{

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private async void Form1_Load(object sender, EventArgs e)
        {
            
            var stockCode = "2330"; // 要查詢的股票代號
            var url = $"https://www.twse.com.tw/exchangeReport/STOCK_DAY?response=html&stockNo={stockCode}";

            var config = Configuration.Default.WithDefaultLoader(); // 建立HtmlAgilityPack套件的設定物件
            var context = BrowsingContext.New(config); // 建立BrowsingContext物件,用於載入網頁並解析
            var document = await context.OpenAsync(url); // 開啟查詢網址所指向的網頁,取得網頁的Html文檔

            var table = document.QuerySelector<IHtmlTableElement>("table"); // 取得表格元素
            var rows = table.Rows; // 取得表格所有的列
            var stockStr = ""; // 用來儲存股價資料的字串
            foreach (var row in rows) // 逐一遍歷表格中的每一列
            {
                var cells = row.Cells; // 取得每一列的所有欄位

                foreach (var cell in cells) // 逐一遍歷每一列中的欄位資料
                {
                    stockStr += cell.TextContent + "\t"; // 將欄位資料拼接成字串,以Tab分隔
                }
                stockStr += "\n"; // 換行
            }
            Console.WriteLine(stockStr);
        }

    }
}

沒有留言:

張貼留言