文章目錄
使用 C# 搭配 HtmlAgilityPack 來獲取網頁內容
最近團隊有個需求,需要從網頁上抓取一些資料,雖然普遍對於網路爬蟲的第一印象都是 python,但因為團隊中多數成員都是 C# developer,為了非常態性需求改使用 python,不僅開發效率變差,加上後續維護也會因為熟悉度不夠而多花不少時間在重新上手,因此還是決定以 C# 為主,只是爬網頁資料有不少套件可以利用,便想趁這個機會比較一下各家 library 的差異,以下是我比較的幾個 library 與筆記連結:
- HtmlAgilityPack:使用 C# 搭配 HtmlAgilityPack 來獲取網頁內容
- ScrapySharp:使用 C# 搭配 ScrapySharp 來獲取網頁內容
- AngleSharp:使用 C# 搭配 AngleSharp 來獲取網頁內容
- Puppeteer Sharp:使用 C# 搭配 Puppeteer Sharp 來獲取網頁內容
- Selenium:使用 C# 搭配 Selenium 來獲取網頁內容
- Playwright:使用 C# 搭配 Playwright 來獲取網頁內容
- C# Crawler 套件 Benchmark
Html Agility Pack (HAP) 是用 C# 撰寫用於讀/寫 DOM 的 HTML 解析器,支援一般的 XPATH 或 XSLT
基本環境說明
- macOS Sequoia 15.0 (Apple M2 Pro)
- .NET SDK 8.0.401
- NuGet Libraries
- HtmlAgilityPack 1.11.66
- HtmlAgilityPack.CssSelectors.NetCore 1.2.1
- Fizzler.Systems.HtmlAgilityPack 1.2.1
使用方式
心得
HtmlAgilityPack 原生僅支援 XPath,需要透過
HtmlAgilityPack.CssSelectors.NetCore
或是Fizzler.Systems.HtmlAgilityPack
來支援 CSS Selector,雖然 Html Agility Pack 官方推薦Fizzler.Systems.HtmlAgilityPack
,但我實際使用起來有幾個不便的地方,我個人比較推薦HtmlAgilityPack.CssSelectors.NetCore
Fizzler.Systems.HtmlAgilityPack
是基於 HtmlNode,不如HtmlAgilityPack.CssSelectors.NetCore
直接使用HtmlDocument
便利HtmlAgilityPack.CssSelectors.NetCore
支援{html tag}.class
的寫法,Fizzler.Systems.HtmlAgilityPack
則需要使用一般有效的寫法:{html tag}[class='{class name}']
如何取得 xpath 或是 selector
開啟瀏覽器的開發者工具並選取要取得的元素
右鍵選擇
Copy
–>Copy XPath
或是Copy selector
完整程式碼請參考 GitHub - yowko/html-agility-pack-demo
參考資料
- 使用 C# 搭配 HtmlAgilityPack 來獲取網頁內容
- 使用 C# 搭配 ScrapySharp 來獲取網頁內容
- 使用 C# 搭配 AngleSharp 來獲取網頁內容
- 使用 C# 搭配 Puppeteer Sharp 來獲取網頁內容
- 使用 C# 搭配 Selenium 來獲取網頁內容
- 使用 C# 搭配 Playwright 來獲取網頁內容
- C# Crawler 套件 Benchmark
- Html Agility Pack (HAP)
- GitHub - Fizzler.Systems.HtmlAgilityPack
- GitHub - HtmlAgilityPack.CssSelectors.NetCore
- 7 Best C# Web Scraping Libraries in 2024
- Popular Scraping libraries in C#
- GitHub - yowko/html-agility-pack-demo
文章作者 Yowko Tsai
上次更新 2024-09-20
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。