首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

從零打造 RSS 訂閱:解析 DOM 樹與自動生成 Feed 實戰

     編輯:關於ASP.NET

動機:學校網站無 RSS,自行開發 Feed 解決方案

身為就業輔導組長,每天必須檢查學校網站最新公告,卻無 RSS 訂閱功能,極不方便。靈機一動決定自己寫一個爬蟲,定時抓取公告頁面並產出標準 RSS 2.0 Feed,讓任何 RSS 閱讀器都能訂閱。

架構設計:四大核心類別

  • RssDocument:根節點,包含單一 RssChannel。
  • RssChannel:頻道資訊(標題、連結、描述),含一個 RssImage(Logo)與多個 RssItem(文章)。
  • RssImage:頻道圖片資訊(URL、標題、連結)。
  • RssItem:單篇文章(標題、連結、描述、發布日期、GUID)。

採用 XmlDocument 建構 XML 樹,優於 StringBuilder 字串拼接:結構強型別、自動處理逸出字元、不易產生格式錯誤,效能亦佳。

關鍵難點:HTML 轉標準 XHTML

目標網站回傳的是鬆散 HTML,直接用 XmlDocument.Load 會失敗。解法:引入 SgmlReader(開源專案),將 HTML 解析為標準 XHTML,再載入 XmlDocument 操作 DOM。

public XmlDocument ConvertHtml2Xhtml(string html)
{
    using (SgmlReader reader = new SgmlReader())
    {
        reader.DocType = "HTML";
        reader.InputStream = new StringReader(html);
        using (StringWriter stringWriter = new StringWriter())
        using (XmlTextWriter writer = new XmlTextWriter(stringWriter))
        {
            reader.WhitespaceHandling = WhitespaceHandling.None;
            writer.Formatting = Formatting.Indented;
            XmlDocument doc = new XmlDocument();
            doc.Load(reader); // 直接從 SgmlReader 載入,自動完成 HTML→XHTML 轉換
            return doc;
        }
    }
}

DOM 定位與資料萃取策略

  1. 觀察目標頁面原始碼,找出公告列表的固定 DOM 路徑(如 /html/body/div[2]/table/tr/td[3]/ul/li)。
  2. 為求速度,採「從根節點向下逐層篩選」而非 GetElementsByTagName 全域搜尋,減少節點遍歷開銷。
  3. 依序萃取:標題(<a> 內文)、連結(href)、發布日期(同列 <span>)、摘要(進入詳細頁再抓或直接取標題)。
  4. 組裝 RssItem 集合,最後由 RssDocument 輸出完整 XML。

部署與自動化

  • 將程式編譯為 Console Application,配合 Windows 排程器每小時執行一次。
  • 輸出 rss.xml 放至網站公開目錄,或上傳至靜態空間(GitHub Pages、Firebase Hosting 等)。
  • RSS 閱讀器訂閱該 XML URL,即時接收最新公告。

原始碼下載

完整專案(含 SgmlReader 參考、RSS 實體類、爬蟲邏輯、排程部署說明)已上傳:點此下載

這個小專案展示了「以標準工具解析非標準 HTML → 結構化資料 → 輸出標準格式」的經典資料管線模式,可輕易擴充至其他無 RSS 網站。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved