1、HtmlAgilityPack
HtmlAgilityPack是.net下的一個HTML解析類庫。支持用XPath來解析HTML。這個意義不小,爲什麼呢?因爲對於頁面上的元素的xpath某些強大的瀏覽器能夠直接獲取得到,並不需要手動寫。節約了大半寫正則表達式的時間,當然正則表達式有時候在進一步獲取的時候還需要寫,但是通過xpath解析之後,正則表達式已經要匹配的範圍已經非常小了。而且,不用正則表達式在整個頁面源代碼上匹配,速度也會有提升。總而言之,通過該類庫,先通過瀏覽器獲取到xpath獲取到節點內容然後再通過正則表達式匹配到所需要的內容,無論是開發速度,還是運行效率都有提升。
但是使用XPaht比較麻煩,所以不推薦
2、ScrapySharp
ScrapySharp是基於HtmlAgilityPack開發的插件,直接根據html標籤、ID、class標籤查找dom,和jquery寫法一樣,推薦使用
using HtmlAgilityPack;
using ScrapySharp.Network;
using ScrapySharp.Extensions;
using System.Linq;
var uri = new Uri("http://www.cnblogs.com/webapi/"); var browser1 = new ScrapingBrowser(); var html1 = browser1.DownloadString(uri); var htmlDocument = new HtmlDocument(); htmlDocument.LoadHtml(html1); var html = htmlDocument.DocumentNode;
//單個 var title = html.CssSelect("title").First(); Response.Write(htmlNode.InnerHtml); //集合 divs = html.CssSelect(".post_item"); foreach (var htmlNode in divs) { Response.Write(htmlNode.InnerHtml); }
3、Fizzler
功能和上邊的ScrapySharp類似,選擇器稍微強大點
using HtmlAgilityPack;
using Fizzler.Systems.HtmlAgilityPack;
var web = new HtmlWeb(); var document = web.Load("https://www.cnblogs.com/webapi/"); var page = document.DocumentNode; foreach (var item in page.QuerySelectorAll(".post-item")) { var title = item.QuerySelector("a").InnerText; Response.Write(title); Response.Write("<br>"); }
4、CsQuery
使用方法和使用jquery一樣,可惜作者不更了
using CsQuery;
using CsQuery.Web;
ServerConfig config = new ServerConfig(); CQ dom = CQ.CreateDocument(html); CQ data = dom[".post-item-text"]; string tep = ""; foreach (var item in data) { tep += item.InnerHTML + "<br/>"; } Response.Write(tep);
5、AngleSharp
這個沒測試不做評價,有興趣的請自行測試
推薦使用Fizzler,小巧方便
下載地址,後期更新