作者: 乔克斯
查看: 27463|回复: 29
打印 上一主题 下一主题

[源码] 【爬虫类库】C#超级方便的爬虫Jumony类库

[复制链接]
跳转到指定楼层
楼主
乔克斯 发表于 2016-5-19 18:29:45 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
查看: 27463|回复: 29
说明:
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结构化伪类

案例源码下载:

评分

参与人数 1金钱 +1 收起 理由
succfu22 + 1 感谢分享,LZ辛苦了~

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏10 转播转播
回复 论坛版权

使用道具 举报

沙发
贱贱的贱贱 发表于 2016-5-19 19:59:02 | 只看该作者
顶!d=====( ̄▽ ̄*)b 无敌干货
板凳
97648077 发表于 2016-5-20 10:23:31 | 只看该作者
papapapa
回复

使用道具 举报

地板
无事要生非 发表于 2016-5-22 15:01:47 | 只看该作者
必须要顶一个,下载了,谢谢
5#
testinfo123 发表于 2016-5-23 17:04:32 | 只看该作者
习惯移植于JSoup的NSoup 简单好用
6#
tangheng1128 发表于 2016-5-23 18:03:13 | 只看该作者
不错哟!
回复

使用道具 举报

7#
chen7ang 发表于 2016-5-28 10:38:21 | 只看该作者
不错,学习学习
8#
logo005 发表于 2016-5-30 17:53:15 | 只看该作者
好东西啊,一定要学习一下,准备做个舆情搜集的
9#
qq385723790 发表于 2016-5-30 22:00:20 | 只看该作者
这个和Csquery比谁更有优势呢?
10#
 楼主| 乔克斯 发表于 2016-5-31 09:04:22 | 只看该作者
qq385723790 发表于 2016-5-30 22:00
这个和Csquery比谁更有优势呢?

如果Csquery支持2.0,呢么Csquery更有优势。
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-4-25 19:22, Processed in 0.691991 second(s), 33 queries , Gzip On.

快速回复 返回顶部 返回列表