Asp.Net HTML 解析类库

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,小巧方便

下载地址,后期更新

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章