说明:
Jumony是一个开源项目,已经有三年的历史了,在这三年中,秉承提供给.NET程序员完整的HTML掌控能力,Jumony历经无数次的改进,终于进入了一个新的阶段。Jumony Core 3是一个真正意义上的HTML引擎。
Jumony Core 3目前已经在NuGet上发布,请直接在NuGet包管理器中搜索 Jumony Core ,即可下载。
项目地址:https://github.com/Ivony/Jumony
效果截图:
介绍:
一、解析器- 也许很多人会认为,目前的HTML解析器已经足够了,甚至于简单的正则,也已经可以满足操纵HTML文档的需求。是的,对于互联网上绝大多数的HTML文档,事实上都大部分满足了XHTML的规范,对于它们的解析,并不需要多么强大的解析器。但是强大的解析器是一回事,而完美的解析器又是另一回事。
- Jumony Core首先提供了一个近乎完美的HTML解析引擎,其解析结果无限逼近浏览器的解析结果。不论是无结束标签的元素,可选结束标签的元素,或是标记属性,或是CSS选择器和样式,一切合法的,不合法的HTML文档,浏览器解析成啥样,Jumony就解析成啥样。也就是说,Jumony解析的结果,与浏览器解析的结果别无二致,让你可以再也不用关心HTML文档是否可以被识别,浏览器能看,Jumony就能解。
- 完美和强大只有一步之遥,但是完美的解析器可以让你永远不用关心HTML源文档。
- 以下是Jumony解析器所支持的特性不完全列表
特性 | 例子 | 孤立的<解析为文本 | < a应当解析为< a | 孤立的>解析为文本 | <a>></a>应当解析为<a>></a> | 标记属性(没有值的属性) | <input type="text" checked /> | 元素丢失结束标签 | <div><a href="test.html">测试链接</div> | 可选结束标签元素
"body", "colgroup", "dd", "dt", "head", "html", "li", "option", "p", "tbody", "td", "tfoot", "th", "thead", "tr" | <p>abc<p>123 | 无结束标签元素
"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "isindex", "link", "meta", "param", "wbr", "bgsound", "spacer", "keygen" | <img src="1.jpg"> | CData元素 | <script>if ( 1<a ) alert( "<div>" );</script> | "script", "style", "textarea", "title" | | 预格式化元素 | <pre> 前面有空格</pre> | 属性值使用单引号 | <a href='#'> | 属性值使用双引号 | <a href="#" | 属性值不使用引号 | <a href=#> | 属性值丢失(但有等号) | <a href=> | 属性值前面有空格 | <a href= "test.html"> | 解析HTML声明 | <!DOCTYPE html> |
不仅仅是可以从文本中解析HTML,Jumony的API可以从互联网上直接抓取文档分析,并根据HTTP头自动识别编码: [C#] 纯文本查看 复制代码 new JumonyParser().LoadDocument( "http://www.cnblogs.com/" ).Find( ".post_item a.titlelnk" )
三、CSS 3选择器支持CSS选择器是HTML世界通行的查询语言,其简洁有力且被众多浏览器支持。Jumony也支持几乎完整的CSS3选择器(除去运行时伪类及伪对象)。借助选择器,我们可以轻松的在HTML中找到我们感兴趣的对象。例如抓取博客园首页所有文章标题: [C#] 纯文本查看 复制代码 new JumonyParser().LoadDocument( "http://www.cnblogs.com/" ).Find( ".post_item a.titlelnk" )
抓取,分析,选择,一气呵成,只需要简单的代码,我们就能在控制台输出我们抓取到的数据: [C#] 纯文本查看 复制代码 foreach( var title = new JumonyParser().LoadDocument( "http://www.cnblogs.com/" ).Find( ".post_item a.titlelnk" ) ) Console.WriteLine( title.InnerText() );
Jumony支持的CSS3选择器列表: 选择器 | 描述 | * | 选择所有元素 | p a | 选择子代元素 | p>a | 选择子级元素 | p+a | 选择相邻元素 | p~a | 选择后继元素 | [attr] | 属性存在选择 | [attr=value] | 属性值精确匹配 | [attr~=value] | 属性值近似匹配 | [attr^=value] | 属性值开头匹配 | [attr*=value] | 属性值包含匹配 | [attr$=value] | 属性值结尾匹配 | [attr!=value] | 属性值否定匹配 | :not | 否定伪类 | :only-child | 唯一子元素伪类 | :only-of-type | 唯一类型伪类 | :empty | 空元素伪类 | :nth-child | 结构化伪类 | :nth-last-child | 结构化伪类 | :nth-of-type | 结构化伪类 | :nth-last-of-type | 结构化伪类 | :first-child | 结构化伪类 | :last-child | 结构化伪类 | :first-of-type | 结构化伪类 | :last-of-type | 结构化伪类 |
案例源码下载:
|