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,小巧方便
下载地址,后期更新