CsQuery——比HtmlAgilityPack更好用的网页解析库

作者:V君 发布于:2016-1-31 5:58 Sunday 分类:折腾手记

之前写爬虫总是用HtmlAgilityPack来解析HTML,当坐骑来用.

直到室友L同学推荐用这货之后,发现自己还在用那么落伍的东西,整个人都不好了, 果断换坐骑.

这货不仅能解析HTML, 还能操作内容之后再吐出来,模板引擎啊这是! (貌似还可以嵌入到MVC...

尽管HtmlAgilityPack也能操作内容,并且再吐出来. 但是两者用法差别到上天下地.


废话不多说直接上代码比较!

 

装载HTML和初始化导航器

老掉牙的HtmlAgilityPack要三行代码才能完成

var doc = new HtmlDocument();
doc.LoadHtml(html);
var nav (HtmlNodeNavigator)doc.CreateNavigator();

用CsQuery的话只需要一行代码就可以了!

CQ doc = html;

这货可以通过隐式转换直接把字符串装入! 并且对象本身就是导航器!

(说到CQ,就想起黑羽宁子CQCQ召唤骇客大神小霞啊魂淡!)


查询元素并取出内容文本

老掉牙的HtmlAgilityPack要XPATH,并且取出内容并不方便

nav.Select("*//span[@id='entryName']/text()")
 .Cast<XPathItem>()
 .Select(p => p.Value)
 .FirstOrDefault();

然而CsQuery跟JQuery一样的选择器语法,在我大井里面写成索引器

doc["span#entryName"].Text();


查询元素并取出属性值

老掉牙的HtmlAgilityPack尽管用一个表达式一次调用就能打到底,但是接收返回值还是蛋疼了点

nav.Select("*//a[@id='entryLink']/@href")
 .Cast<XPathItem>()
 .Select(p => p.Value)
 .FirstOrDefault();

用CsQuery分两次调用取到值,但比起上面的代码简洁到爆,有木有

q["a#entryLink"].Attr("href")

 

碉堡了有木有,之前是很讨厌JQuery的,特别是稍稍熟悉就以为自己掉渣天的家伙们

于是自己的东西一直写着原生JS,当然,工作方面的还是该咋滴咋滴,要求用啥就用啥

好啦,现在,就连我大井也有JQuery的移植版了,美其名曰 CsQuery


还有更复杂的用法,但这两个示例足以体现代码差异.

~EOF



 

标签: 软件开发 C# 模板引擎 MVC 爬虫 HTML

引用地址:

评论:

果果蛋
2016-06-07 11:22
博主怎么联系你,我想请教你关于.net爬虫的问题
V君
2016-06-07 13:24
@果果蛋:可以留下邮箱,然后加IM.
当然, 直接在这里问,给博客刷点人气更好(=゚ω゚)=

发表评论:

Powered by emlog 去你妹的备案 sitemap