用TinySpider进行网页抓取实例

  1. 云栖社区>
  2. 博客>
  3. 正文

用TinySpider进行网页抓取实例

悠悠悠然然 2016-05-09 14:06:19 浏览1960
展开阅读全文

本例中用到的maven坐标变化如下:

1
2
3
4
5
<dependency>
<groupId>org.tinygroup</groupId>
<artifactId>org.tinygroup.spider</artifactId>
<version>0.1.0-SNAPSHOT</version>
</dependency>

在百度中搜索笑话,看到这么一个网站:http://www.jokeji.cn/,点进去看看,里面的内容比较简单,也比较有趣,呵呵,就它了,我们今天的示例就是如何利用TinySpider来进行网页抓取。

示例1:获取某个分类下的笑话列表

首先在笑话分类中看到个爆笑男女,呵呵,先拿它小试一下,看看是否有效果。

首先编写一个main方法,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class JokejiTest {
    public static void main(String[] args) {
        Spider spider = new SpiderImpl("GBK");
        Watcher watcher = new WatcherImpl();
        watcher.addProcessor(new PrintJokejiProcessor());
        QuickNameFilter<HtmlNode> nodeFilter = new QuickNameFilter<HtmlNode>();
        nodeFilter.setNodeName("div");
        nodeFilter.setIncludeAttribute("class", "list_title");
        watcher.setNodeFilter(nodeFilter);
        spider.addWatcher(watcher);
        spider.processUrl("http://www.jokeji.cn/list29_1.htm");
    }
}

下面简单用通俗的话介绍一下,上面代码的作用:

首先构建一个爬虫,字符集是GBK,然后建立一个Watcher,Watcher用于在抓取的内容中,进行数据过滤。

如果过滤到内容呢,就执行PrintJokejiProcessor处理器进行处理。

后面设置过滤方式,是查找div标签,并且其class属性是list_title,最后,让爬虫去爬取http://www.jokeji.cn/list29_1.htm页面。

OK主程序就写完了,上面有个类PrintJokejiProcessor也是需要自己写的,内容如下:

1
2
3
4
5
6
7
8
9
10
public class PrintJokejiProcessor implements Processor {
    public void process(HtmlNode node) {
        FastNameFilter<HtmlNode> filter = new FastNameFilter<HtmlNode>(node);
        filter.setNodeName("a");
        List<HtmlNode> aList = filter.findNodeList();
        for (HtmlNode a : aList) {
            System.out.println(a.getContent());
        }
    }
}

这个类的意思是,node就是上面说的包含list_title属性的div,然后从其里面找到所有属性名是a的节点,并打印其内容。

运行之,运行结果如下:

1
胖子是可爱滴,胖子更是的幽默滴 尽情的笑话我,别骂我2B就行了 这节奏,不糗死也得气疯掉 太损鸟,不挨揍,也得挨骂 爆笑的“二”哥 爆笑的妹子们,哥有点怕你们了 哈哈,逗的妹子很生气 奇葩情侣,雷你到恍惚 极品囧事,谁看谁爆笑 爆笑的二货们刚刚过完了年 幽默乐人的囧男女 二货的情人节笑话段子 一群爆笑又疯狂的游戏迷 结婚典礼的笑场囧事 一些非夷所思的搞笑糗事 你这么二,不怕别人笑话么? 他们来自淫民大学内涵系 搞笑的二货情侣 屌丝爆笑,这辈子别想有女友 脸都绿了,憋到内伤啊! 爆笑,一帮傻傻又可爱的二货

从上面的的列表看,确实已经正确抓取的到数据,小试成功。

示例2:抓取所有的分类列表

先先Main方法

1
2
3
4
5
6
7
8
9
10
11
12
13
public class JokejiCategoryTest {
    public static void main(String[] args) {
        Spider spider = new SpiderImpl("GBK");
        Watcher watcher = new WatcherImpl();
        watcher.addProcessor(new PrintJokejiCategoryProcessor());
        QuickNameFilter<HtmlNode> nodeFilter = new QuickNameFilter<HtmlNode>();
        nodeFilter.setNodeName("a");
        nodeFilter.setIncludeAttribute("class", "user_14");
        watcher.setNodeFilter(nodeFilter);
        spider.addWatcher(watcher);
        spider.processUrl("http://www.jokeji.cn/Keyword.htm");
    }
}

再写里面的处理器:

1
2
3
4
5
public class PrintJokejiCategoryProcessor implements Processor {
    public void process(HtmlNode node) {
        System.out.println(node.getContent());
    }
}

下面是运行结果:

1
爆笑男女(1094) 社会(778) 冷笑话(737) 校园(607) 综合(448) 儿童(446) 夫妻(431) 爆笑签名(332) 家庭(307) 动物(305) 职场(276) 短信笑话(252) 幽默网文(211) 幽默笑话(150) 影视台词(132) 爱情(120) 医疗(109) 文艺(107) 名著暴笑(105) 哲理(99) 愚人(96) 节日笑话(92) 民间(89) 名人(87) 交通(86) 国际(70) 体育(60) 恋爱必读(51) 网络(50) 电脑(47) 宗教(47) 司法(44) 恐怖(42) 搞笑测试(38) 军事(34) 感情(32) 搞笑歌词(29) 顺口溜(27) 女人(27) 股市证券(21) 传说(13) 小笑话(9) 爆笑笑话(7) 求爱秘籍(6) 英语(5) 原创(4)

呵呵,目录就打印出来了,当然后面附加了每个分类下的笑话数,要去掉它,太简单了因此,这里就不再耗费时间了。

示例3:打印所有分类下的笑话标题:

这里就简单的处理一下,把上面的两个类小改一下:

JokejiTest类的main方法修改成静态方法processUrl ,然后把下面的处理的URL变成参数传入

1
2
3
4
5
6
7
8
9
10
11
12
13
public class JokejiTest {
    public static void processUrl(String url) {
        Spider spider = new SpiderImpl("GBK");
        Watcher watcher = new WatcherImpl();
        watcher.addProcessor(new PrintJokejiProcessor());
        QuickNameFilter<HtmlNode> nodeFilter = new QuickNameFilter<HtmlNode>();
        nodeFilter.setNodeName("div");
        nodeFilter.setIncludeAttribute("class", "list_title");
        watcher.setNodeFilter(nodeFilter);
        spider.addWatcher(watcher);
        spider.processUrl(url);
    }
}

PrintJokejiCategoryProcessor类改成下面的样子

1
2
3
4
5
6
7
8
public class PrintJokejiCategoryProcessor implements Processor {
    public void process(HtmlNode node) {
        System.out.println("===============================================");
        System.out.println(node.getContent());
        System.out.println("===============================================");
        JokejiTest.processUrl("http://www.jokeji.cn"+node.getAttribute("href"));
    }
}

就是说打出标题之后,再去利用URL进行下一层的数据抓取。

下面是调整之后的运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
===============================================
爆笑男女(1094)
===============================================
胖子是可爱滴,胖子更是的幽默滴 尽情的笑话我,别骂我2B就行了 这节奏,不糗死也得气疯掉 太损鸟,不挨揍,也得挨骂 爆笑的“二”哥 爆笑的妹子们,哥有点怕你们了 哈哈,逗的妹子很生气 奇葩情侣,雷你到恍惚 极品囧事,谁看谁爆笑 爆笑的二货们刚刚过完了年 幽默乐人的囧男女 二货的情人节笑话段子 一群爆笑又疯狂的游戏迷 结婚典礼的笑场囧事 一些非夷所思的搞笑糗事 你这么二,不怕别人笑话么? 他们来自淫民大学内涵系 搞笑的二货情侣 屌丝爆笑,这辈子别想有女友 脸都绿了,憋到内伤啊! 爆笑,一帮傻傻又可爱的二货 
===============================================
社会(778)
===============================================
绝B坑爹,坑到气绝身亡 黑色幽默,荒唐的事儿真不少 碰到这种事,我一般都狂笑不语 坑爹都不带打草稿的 都意味深长的笑了 几段过年的冷幽默 莫和有钱人攀比,比不起呀! 爆囧的二货借钱 过年的爆囧段子,笑味四溢 春节笑话特辑,给笑友们拜年了 吐槽春运的冷段子 快过年了,搞笑开启过年模式 爆糗的买单,看谁脸皮厚 火车票它是个冷笑话 妹的,被鄙视了,好郁闷啊! 糊里糊涂,迷迷糊糊的郁闷挫事 吃喝方面的搞笑二货囧事 逗人糗事,非常非常的火大 可以学到生活技能的小笑话 这是该哭呢还是该笑啊! 近在身边的幽默生活讽刺 
===============================================
冷笑话(737)
===============================================
调皮禅师出没,小心冷倒 都不按套路来,有点乱套哈 天上到人间的冷段子,凌厉冻人 他们祖上是卖冰棍的,冷出身 冷的好笑,新鲜又冻人 认识的人都说:骚年,你好冷. 冷人的歌曲控,她(他)们的歌唱的很好 你这么冷,你家生火炉了吗? 笑话里面有年味儿 贱气如霜,真够冷! 颇为冻人的逗笑冷幽默 逗笑冷料,不由自主的想笑 专黑经典名著的冷笑话 爆逗冷语,不笑僵也得被冻僵 冷的经典,笑的开心 玩的就是没节操 太冷,适合躺被窝看的冷笑话 糟践名著的冷笑话 小冷怡情,解闷消愁 冷翻,二起来真是没个够啊! 冬天的笑话,冷的很! 
===============================================
校园(607)
===============================================
逗B学生的爆冷囧事 搞起笑来,学生的境界越来越高 大学生没几个学习的,都在干啥呢? 爆笑:二货老师,让学生受不了 学生调皮捣蛋,气得老师干瞪眼 听到老师说这些就头皮发麻 憋到老师内伤的二货家长 对寒假作业那是恨之入骨啊! 爆笑逆天的二球学生 狠有幽默精神的老师 学渣怎么就成了人渣了呢? 有二货同学在,不想笑会很难 每到期未,校园段子常出没 幽默有笑的男女趣话 学渣路上的风景真美好! 无药可救的搞笑学渣段子 二B同学雷翻天 幽默老师,让学生很悲催 校园的花朵,朵朵奇葩 校园的爆囧坑爹、损人事 气的老师暴跳如雷 
===============================================
综合(448)
===============================================
超含蓄的内涵笑话 精辟、机智幽默的问答 幽默的狠,暗暗发笑 囧到满脸惊讶的爆笑 幽默精品,别笑翻喽! 一些无知、脑残的爆冷糗事 嘎嘎,多委婉的搞笑吧! 内涵搞笑,源自那颗不甘寂寞的心 东拉西扯,闲趣爆笑 爆笑雷人,这些人真会玩 生活中的搞笑趣事,哭笑不得 非傻即呆,逗你开心 不经意间就闹出笑话 高水平的新编段子、歇后语 幽默冷人:无可救药的学生、朋友 十分搞笑的老年人 周未闲情,感人至深的情感微小说 幽默的调侃,冷人的讽刺 搞笑谜语,活动下你的大脑 拿人寻开心的冷幽默 蔬菜瓜果的幽默言语 
===============================================
儿童(446)
===============================================
爆笑小盆友,专治笑点高 儿童带给我们的欢乐太多了 熊孩子们厉害啊,把大人憋到内伤 让大人尴尬万分的熊宝宝 爆笑熊孩子,你知道的太多了 就是在哭,熊宝宝也能把你逗笑了 奇葩小伙伴,有萌有逆天 过年,总让人想起小时侯 贫嘴的小朋友,小心被爸妈揍 要把人笑疯掉的小伙伴 萌呆宝贝的爆笑糗事 这宝宝非让人笑爆不可 淘气孩子,笑的肚子疼 爆笑调皮的浑小子 笑死人也气死人的熊孩子 非常勤快、懂事的熊孩子 叫父母不淡定的爆笑熊孩子 爆笑的二货兄弟姐妹 儿童幽默,巨冷的萌宝贝 孩子,照顾点父母的情绪吧! 非萌呆即吃货的小伙伴 
===============================================
夫妻(431)
===============================================
二货夫妇,二到那里,笑到那里 二B老公让大家不缺笑 明嘲暗讽的逗B小两口 二不够的夫妻,叫你笑个够 逗B夫妻的搞笑囧事 都被老婆修理怕了。 没节操的闷骚夫妻 夫妻调侃的小幽默 幽默夫妻战,增加夫妻斗争经验 欢声雷动的婚礼现场 爆笑的重量级老公 互相嘲讽的开心小夫妻 假话连篇的幽默小夫妻 苦B爆笑,做老公的赶脚很不爽 狠不地道的搞笑老婆 最令人生畏的人是老婆 最爱看夫妻斗嘴、吃醋 夫妻间摩擦出搞笑的火花 老婆对我真好,太TM感动了!!! 爆糗夫妻,老婆又不高兴了 旁观者清,爆笑的弱夫悍妻 
===============================================
爆笑签名(332)
===============================================
俏皮的狠,一串笑语乐半天 常吐嘈,能调侃,幽默每一天 犀利吐槽,这几个意思?! 不说他们有多搞笑,说说他们有多2B 又损又冷的二货趣语 爆冷言录,弱弱的逗你笑一个 有点讽刺,更多的是有些2B 俏皮辣语,逗你乐得跟过年似的 多多吐槽,心情会变好 充满矛盾的搞笑趣语 俏皮二货,总和别人想的不同 幽默为风格,俏皮为风骨 句句戳中青年男女的心 把悲催当笑话诉说 青春逗之男女调侃趣语 俏皮幽默的趣侃、吐槽 多么痛的搞笑领悟 爆逗俏皮的闲情笑语 幽默冷话,要把调皮进行到底 总结2013,笑迎2014的跨年爆笑段子集锦 用苦B调侃来排解郁闷 
===============================================
家庭(307)
===============================================
幽默爸妈乐一家 这些老妈是棵不可靠的大树 让儿女超无语的亲爸妈 老爸是个搞笑达人 老爸老妈适合演小品 尖刻犀利的雷人爸妈 家里有个幽默的爸妈 爆囧的老人,真是家有一老,如有一宝 父母雷事,觉得他(她)们有些二 这恐怕是最“有爱”的爸妈了吧 熊孩子和雷爸妈的小笑话 欢声雷动的爆笑一家人 极二的爸妈,真是空前绝后啊 有种爹妈,叫不是亲生的 搞笑的家长,苦B的儿女 爆笑老爸老妈,房梁都能笑歪了 爆笑亲子,雷爹悍妈 笑掉大牙的雷神爹妈 孩子成了家长的开心果 奇葩父母,让孩子很无语 巨冷父母,都是幽默高高手 
===============================================
动物(305)
===============================================
爆冷有笑的动物,I孵了You 好冷的动物,跟寓言似的 冷若冰霜的搞笑小动物 爆笑动物,瞧见它们就想笑 爆冷萌翻天的动物伙伴们 幽默动物说出了我们的心声 动物们婚后的怨气真大啊! 滑稽的动物笑死人了 很有冷笑果的搞笑动物 很有灵性的爆笑狗狗 又冷又逗的超萌动物 好冷好幽默的小动物 动物的搞笑念头 动物的整容效果很搞笑 动物的搞笑杂侃 狼爱上羊,那是经过深思熟虑的 动物嘴里的的名言雷语 非常逗笑的爆冷动物 狗很生气,奋力辩解 动物王国的开心冷人事儿 动物的幽默“变迁” 
===============================================
职场(276)
===============================================
搞笑不俗的冷人小老板 冷人的职场笑料 爆笑,面试场上显“才华” 最苦B抓狂的事是加班! 要笑翻的爆囧同事 幽默贫嘴的2B同事 没有年终奖,只有年终殇 超坑爹的领导和老板 二B同事让人憋到内伤 老板真幽默,不服不行 办公室里开心靠二货 二货同事给上班增加了不少欢乐 又坏又损的幽默二货同事 精通幽默的生意人 科长给我们上了堂“扫盲”课 老王和的小王职场爆笑 奇葩同事能让上班有个好心情 微软收购诺基亚后,两个CEO的幽默对话 爆汗的职场趣事 笑翻一地的职场糗事 办公室里传来爆笑声 
===============================================
短信笑话(252)
===============================================
幽默浪漫的情人节短信 马年幽默祝福短信马上到 如此荡漾,不得不想歪! 元旦搞笑幽默短信送亲友 圣诞节祝福短信之幽默搞笑版 2013幽默搞笑国庆短信送亲友 精选逗人短信贺中秋 给超龄儿童的六一节幽默短信 一群雷人的二货、闷捣蛋 整蛊逗人短信一溜串 精选幽默短信迎三八 逗乐短信迎元宵 新年到!幽默拜年短信串串烧。 2013新年开心搞笑短信送亲友 极品整人短信串串烧 新年、春节的幽默短信送祝福 幽默逗人的元旦祝福短信 2012圣诞节笑话、短信 一组逗人的幽默整蛊短信 经典搞笑的光棍节短信集锦 万圣节幽默搞笑短信 
===============================================
幽默网文(211)
===============================================
幽默成语数学题、妙改诗词名句、歇后语 妹子们,胸小要自信,胸小好处多! 雷人不厌的神回复 毁人不倦的神回复 是长大后改变了我们的小时侯 辣妈吐槽带孩子苦 真有钱,土豪和他们都没法比 问题很平常,答案很搞笑,跟谜语似的 看春晚,只为能开心的吐槽 赏吃货风采,品吃货语录 若非脑残,便是神经病了 被窝才是真正的人间天堂 妙改诗词、名句,灰常搞笑 逗你会心微笑的俏皮辣侃 精彩夺目的幽默神回复 “斗地主”悟出的人生道理 笑翻,真是一群无耻之徒! 十句深受“鼓舞”的“名言警句” 最坑爹的游戏--人生,不玩都不行 一定会爆棚的装B活动 非常“有用”的生活小常识 
===============================================
幽默笑话(150)
===============================================
笑话集原创笑话精品展第二十七期 笑话集原创笑话精品展第二十六期 笑话集原创笑话精品展第二十五期 笑话集原创笑话精品展第二十四期 笑话集原创笑话精品展第二十三期 笑话集原创笑话精品展第二十二期 笑话集原创笑话精品展第二十一期 笑话集原创笑话精品展第二十期 笑话集原创笑话精品展第十九期 笑话集原创笑话精品展第十八期 笑话集原创笑话精品展第十七期 笑话集原创笑话精品展第十六期 笑话集原创笑话精品展第十五期 笑话集原创笑话精品展第十四期 笑话集原创笑话精品展第十三期 笑话集原创笑话精品展第十二期 笑话集原创笑话精品展第十一期 笑话集原创笑话精品展第十期 有点内涵的幽默小笑话 笑话集原创笑话精品展第九期 笑话集原创笑话精品展第八期 
===============================================
影视台词(132)
===============================================
小品《同学会》犀利台词 小品《偏方》经典台词(湖南卫视春晚) 2014春晚小品《扶不扶》台词集锦 春晚台词之小品《我就这么个人儿》精彩台词集锦 春晚台词之小品《扰民了您》精彩台词集锦 强力段子,专黑中国好声音 超得瑟的刘能语录 富春山居图的幽默犀利台词 西游降魔篇经典台词 《给你一千万》台词怪好笑类,河南人必看 《正者无敌》台词很爆笑啊 爱情公寓3搞笑台词第二季 爱情公寓3幽默台词 《饭局也疯狂》台词可真逗 新版西游记的爆笑雷人台词。 电影《大魔术师》经典台词,笑点十足诠释魔术人生! 吐槽2012春晚的笑人段子 小品《相亲2》搞笑台词、视频 冯巩小品:跟着媳妇当保姆台词+视频 搞笑雷人的失恋33天台词 导演与演员的小幽默 
===============================================
爱情(120)
===============================================
谈女人就离不开钱 红太狼这样的女人不能娶 婚恋生活锤炼出来的趣言妙语 几对情侣的爆逗趣事 恋爱像极了销售 情感俏皮话,也是大实话 专业的幽默情书精选 恋爱妙喻,恋爱像什么? 求婚被拒的搞笑理由 核桃姑娘,星期一姑娘和铅笔姑娘的感人“爱情” 夫妻小幽默,充满喜和乐 吐嘈感情和结婚 爱情这个神话有点悲催 谈情说爱的经典语录 情感男女的一句话爆笑 恋爱有关的小幽默 你要嫁人,不要嫁给这些人 恋爱情侣的笑人糗事 让人苦笑的恋爱男女 经典的爱情妙喻微小说 闲言碎语话男女 
===============================================
医疗(109)
===============================================
医院是个可以冷死人的地方 医患囧事,哭笑不得 爆笑医患,啼笑皆非的囧事 黑医生的医疗冷幽默 他们不是医疗专家,是冷笑话专家 医疗讽刺:坑爹的医生寻常见 爆冷的医生、护士与病人 医患之间逗人冷笑话 搞笑的医院院长修电视 爆冷的医生让人Hold不住 不同服用方法药品的幽默言语 别具特色的“药名”情书三封 幽默冷人的病人和医生 这些医生很雷很搞笑 搞笑‘戏说’医疗工具 做强盗远不如做医生 为医院科室写的幽默对联 医生看病的经典冷幽默 难倒医生的爆笑病号 巨冷的医患幽默 相当不着调的医生和病人 
===============================================
文艺(107)
===============================================
幽默之眼看成语2 巨有趣的看数字猜成语 幽默好玩的词语新解 幽默有趣的成语之最 超有趣的歌名组合,逗笑冷人 大小写字母闲侃生存之道 有些汉字可以拆开了解 幽默趣文:贬义词要褒义看 趣味横生的字说字话 小写字母之间的幽默饥讽 汉字之间的讥笑 春晚的槽点不断涌现 歪解动物成语、歇后语 趣味词典,汉字拆开来解释 悠闲的汉字之间讥讽、斗嘴 汉字逗趣:多看一眼,就会有新发现。 幽默的数字求婚 歪解成语,我是这样理解的。 幽默之眼看成语 英文字母的幽默拾趣 各种乐器的搞笑个性签名 
===============================================
名著暴笑(105)
===============================================
西游三国外传冷笑话版 三国故事的当代幽默演绎 分析发现,孙悟空其实是个女人 好雷爆冷的名著乱编 无良的名著恶搞冷笑话 恶搞名著到不忍心 偏冷的三国冷段子 水浒人物的职场感言 爆冷的闲侃西游记 唐诗宋词要幽默读 搞笑的四大名著倒过来写 三国西游混搭冷笑话 水浒人物最爱唱的流行歌曲 水浒人物就在我们的日常文章中 拿名著涮点冷幽默乐乐 吕布、鲁智深和包大人的冷笑话 三国人物上网干点啥? 拿西游、三国、水浒玩穿越 三国西游穿越版笑人冷料 冷笑话玩穿越,古人躺着也中枪 笑死人的四大名著冷笑话 
===============================================
哲理(99)
===============================================
陶冶心性的哲理妙语 幽默言录,很有哲理的赶脚 体悟生活的精练妙语 回味悠长的哲理故事 周未闲情,陶冶情操的人生佳句 修身养性妙语录,别有一番滋味在心头 幽默经典的阅世趣语 形象的妙喻,幽默的道理 比较有幽默感的生活经典感悟 幽默俏皮话里有哲理 有意义、有道理的幽默句子 颇具哲理的幽默良言 巧妙风趣的生活哲理趣话 生活里感悟到的幽默妙语 哲理小语,很有实现意义 以苦做乐,幽默人生 幽默的另类观点,颇有哲理 小有哲理的励志趣语 绝妙比喻诠释人生 感悟生活要有一棵幽默之心 人生感悟,幽默哲语 
===============================================
愚人(96)
===============================================
蠢人糗事,好白痴的赶脚 傻笑就是越傻越好笑 越傻越爆笑,特别是装傻 生活中的可笑蠢事 囧翻,正常人不会干这种事儿 老年人的精品糗事 爆囧,这智商真叫人捉急 囧,好一会儿才反应过来 尴尬糗事,想起来就脸红 怪味幽默,疑似智商有问题 二货界里的奇葩,争奇斗艳啊 又到愚人节,愚料几小节 愚人冷幽默,无知才会愚昧 爆笑愚人,一蠢到底 职场、生活里的爆笑同事 寄信、醉鬼和打劫等愚人爆笑 超有笑的愚人囧事 搞笑雷人:不是脑抽,就是真傻。 神级脑残惹人爆笑 特别冷的愚人蠢事小笑话 搞笑愚人逗你捂嘴偷乐 
===============================================
节日笑话(92)
===============================================
逗B们的搞笑情人节 爆笑诙谐的圣诞笑话,祝笑友们圣诞快乐! 光棍的好处可真不少! 国庆假期里的开心趣事 二货的中秋最快乐 中秋特供:笑话仁的月饼 回味七夕的冷段子 笑迎内涵的七夕节 植树节将至,树‘木’有话说 三八节,一个苦B男人的一天 盘点春节期间的段子、笑话 春节期间的逗笑趣事 2013情人节超恶搞笑话 雷语段子吐槽春节、春晚 2013春晚爆笑台词精彩合集 蛇的笑话歇后语 一些春节的笑话段子 年关将至,年货有话说 光棍节说棍 国庆假期陪你开心过 幽默趣侃月饼和中秋 
===============================================
民间(89)
===============================================
爆囧的大妈、老爷爷 偷奸耍滑的小寓言,十分坑爹 有张俏皮嘴,搞笑很轻松 可爱雷人的大爷、大妈 夏天啤酒喝多后的案例分析 恶心冷人的开心段子 广为流传的经典笑话 愚人娱乐,看谁最傻瓜 愚笨鲁莽的民间爆笑 搞笑吝啬,抠门到没法说 幽默风趣的文化人儿 讽刺一下那些臭显摆 吝啬的、贪心的,都蛮搞笑的 民间笑话,都是玩冷的高手 作家,舞蹈家等民俗名人小幽默 小笑话:看望犯人、冰啤酒和父亲的相片 几件荒唐爆笑事儿 爆笑的小偷、小贩、懒汉和起名专家 很逗笑的尴尬糗事 冷人又讽刺的古人幽默 吝啬笑话里的极品。 
===============================================
名人(87)
===============================================
精编恶搞名人、明星冷段子 汪峰段子,比上头条的那些人都要火 明星冷段子,中枪的会是谁? 欲哭无泪的郭小四 调侃明星的流行段子 明星、大腕们的幽默佚事 莫言的诺贝尔冷幽默 元芳体爆红:元芳,你怎么看 很带劲的韩乔生体 一些郭敬明的段子,颇为好笑 包青天系列冷笑话集锦 青天包大人最近很忙 名著名人过“五一” 拜读下赵丽华的幽默诗歌(梨花体) 名人经商,起个名字很轻松(明星体店名) 潮人凤姐,最近雷语频出 要像乔布斯那样活,不要像乔布斯那样死 移花接木,名人嘴里的俏皮话 跟世界名人学幽默感 达尔文、关羽等名个冷笑话。 姚明退役了,发点他的笑话纪念下, 
===============================================
交通(86)
===============================================
大雾的搞笑影响 乐在囧途,公交车上乐事多 车祸之后的爆笑奇闻 闯黄灯和酒驾的搞笑段子 笑声不断的公交车上 乘公交和乘飞机的冷幽默 让堵车也有个好心情 挤公交的搞笑成语版 飞机上的囧事乐死人 交通幽默:这些人真够难缠的. 一组幽默搞笑车贴 交通冷幽默,逗人乐翻天 搞笑大话挤公交 春运买票的俏皮网语 巨雷的春运内涵段子集锦 飞机上的冷人爆笑 搞笑词典驾照版 乘公交和住酒店的雷事儿 飞机上搞笑的乘务员和旅客 高油价下的节油终极攻略。 加油站加油看身份 
===============================================
国际(70)
===============================================
奥巴马看到了,鼻子会气歪的 国耻9.18,唾骂小日本正当时 美国、苏联和穆斯林的冷幽默 国际段子,拿美帝开涮 千万百计的嘲弄小日本 专开国际玩笑,开到联合国 狠骂小日本,以解心头之郁闷 理性反日,君子动口不动手 网友对西宫伸一之死的爆强评论 痛骂小日本的笑话段子 笑话气死小日本 国际段子,笑遍全球 国际笑话,经典讽刺 经典的国外小笑话几则 经典:笑话里面看国家特点。 G20与外星人的笑话。 爆笑的医生看美国强迫人民币升值。 来自美国的小幽默 国外爆笑:比比看看谁傻瓜 阿姆斯特朗举世闻名的一句话 朝鲜小学生作文:金爷爷哭了。 
===============================================
体育(60)
===============================================
奥运五环变四环的冷幽默 国足啊,真真的为你感到脸红 可怜滴国足,都被损成这样了! 有关足球的搞笑段子 非把球迷(足球)气晕不可 幽默段子告别本届奥运会 伦敦奥运冷笑话 各种体育项目的逗人雷语 伦敦奥运会的雷人花絮 为啥伦敦奥运冠军都咬金牌? 体育赛场项目、工具的幽默趣侃 体育项目之间的幽默神侃 奥运会不仅产生金牌,还产生笑话 火爆新鲜的伦敦奥运段子 奥运体育项目的搞笑调侃 各种球类之间互为偶像 吐槽伦敦奥运的爆笑段子 奥运会的小笑话几则 看欧洲杯能看出家庭纠纷来 调侃欧洲杯的火热爆笑段子 另类视角看体育项目 
===============================================
恋爱必读(51)
===============================================
男女情感的幽默剖析 大话男女,说到你的心窝里 内涵幽默,这代表几个意思呢? 妹子,你真是太逗了 你二的精彩,我们笑声鼓励 恋爱、婚前的精品幽默读物 有人太损,小心作茧自缚 泡妹子的辛酸事儿 经典趣侃婚恋男女 妙不可言的婚恋男女锦句 妙语侃婚恋,恋爱前必读 解读男女婚恋情感的幽默妙语 幽默情感妙语串烧 女孩眼里男生的问题多多 男人就像一盘菜 幽默的相亲和介绍对象 恋爱、婚姻的妙言妙语和深度解读 经典俏皮滴婚恋情感趣语 十分经典的幽默婚恋妙语录 经典恋爱妙语、小笑话 婚恋经典风趣语录 
===============================================
网络(50)
===============================================
买iPhone5的雷人段子 iPhone5的各种雷人吐槽段子 精典雷人的IT段子 谷歌收购摩托罗拉的段子 个人资料说明文字笑死人 非常搞笑的QQ个人说明签名 淘宝上的爆笑差评 雷人网名一小串。 上网就像谈恋爱 盘点2010年十大网络流行语--给力,我爸是李刚,... 2010网络年度雷人总结 调侃腾讯和360的小段子。 腾讯VS360,微软等也行动起来了。 黑客和电脑菜鸟的爆笑对话 调侃网民的冷笑话。 当俗话遇上互联网。 古人早已会使用互联网。 细致的观察,幽默的感悟。 幽默网络箴言录 最佳网名奖牌榜 搞笑网络流行语 
===============================================
电脑(47)
===============================================
巨冷搞笑的程序员 爆笑程序员的笑话集锦 iPhone和诺基亚的冷段子 电脑名词的生活化解释 Dota游戏中的搞笑事儿 电脑其实是个女的。 硬盘漏水、压死病毒和电脑写信 巨搞笑的IT行业笑话。 爆笑:天堂的破服务器。 洞房花烛夜之电脑版,笑死啦!哈哈~ 电脑与老婆 百度最强贴吧列表,有点无聊哦~~ 主席的QQ和他们QQ好友们 绝密啊!!! 淘宝上看到的好评与差评解释 无所不知的万能电脑 疯狂的网游迷 “小姐像我老婆”群主版 电脑冒烟现象的修复办法 软件版本号新解 电脑城有了绿坝以后 IT人士群聚喝酒的讲究(超级搞笑) 
===============================================
宗教(47)
===============================================
有关牧师的经典爆笑 逗人的和尚冷笑话 好冷的阎王、上帝和神父 菩萨、耶稣和传教士等冷笑话 神是这样安排人这一生的。 牧师和上帝的小笑话 保守忏悔秘密的神父 爆笑的上帝、天使、牧师和神父 幽默的牧师和圣彼得 牧师、神父和耶稣的小笑话。 经典宗教笑话几则 酒吧门外的修女与酒鬼 耶稣和撒旦的矛盾起因 上帝与牧师和神甫的笑话 牧师和尚和虔诚的基督徒 算命的算的可不单单是准。 人都是说谎和不忠实的 牧师座飞机 选择天堂还是地狱. 修女的假期 不小的收获 
===============================================
司法(44)
===============================================
荒唐滑稽的警匪爆笑 搞笑的犯人、法官和律师 爆笑:同情的说,这些犯人够惨的 荒诞不经,离奇搞笑 司法领域的冷人幽默 贼和骗子的冷幽默 法官、律师和富翁的冷幽默 劫匪、小偷的冷人爆笑 巨流行的警察淘宝体。 被告、骗子和抓小偷 犯人、小偷和拆弹专家 搞笑犯人和小偷 爆笑的犯人、律师和法官 司法领域冷冷的小笑话。 幽默的司法小笑话。 Police遇到的爆笑解释 抢匪的爆笑日记。 法庭之上的幽默 法庭一般是这样审案的。 调侃律师的笑话 法庭上的法官和贪官 
===============================================
恐怖(42)
===============================================
越想越怕,好吓人的赶脚! 恐怖啊,额滴神呐,吓尿了!!! 比闹鬼还恐怖,夜间勿看,胆小勿看 不要怕,只是有“一点点”恐怖 恐怖幽默,妈呀吓屎人 恐怖鬼笑话,吓的心砰砰直跳 吓人的鬼笑话,冷到恐怖 恐怖小笑话,胆小勿入哈 恐怖的半夜上厕所 彰显个性的墓碑铭 好恐怖啊,小心吓到你。 恐怖:有个吊死鬼,你敢不敢去看 深夜里的未班公共汽车。 太平间里的吓人话。 冷冷的,又有些恐怖。 阎王和鬼的笑话 超吓人短篇鬼故事 12个好玩又怕怕的鬼故事 奉献几个鬼故事,胆小的不要看哦~~ 两个倒霉鬼在酒吧喝酒聊手机 鬼片里面的基本定律 
===============================================
搞笑测试(38)
===============================================
找大师唠点冷料乐乐 巨准的星座性格特征,总有一款适合你 搞笑急转弯,明显反应不过来 这些倒霉郁闷事,你肯定碰到过不少 测下你的女友值不值得娶回家 春节来做脑筋急转弯 测测你脑残了没有! 猜猜脑筋急转弯,活跃下你的大脑, 脑筋不转弯,还真答不上来. 考验你智商的脑筋急转弯 你说这会是什么影片? 笑看12星座的性格特点 开心雷语,有些可以做签名。 如果房价大跌,如果你家有一亿元. 全方位测一下你的男友哈~ 看似简单的小测验 很准的测试,认真思考,一测一个准。 眼睛困了要做眼睛保键操。 人性悖论,倒霉事及星座排行 猜下这两个人是什么关系? 整蛊测试,挺灵的哈~ 
===============================================
军事(34)
===============================================
经典的军旅生活爆笑 军营里的开心幽默 军营内外的小笑话 爆笑的新兵训练和体检 搞笑的新兵和警员 露马脚、惩罚和诉苦等冷幽默 风趣军营小幽默 军营里体检、训练和跳伞等冷笑话. 经典的军营笑话 有趣军事小笑话。 韩国发现的朝鲜炮弹。 二战相关的几个小笑话。 幽默开心的军旅笑话 迎八一,军人的幽默。 军营里面的有趣事儿。 这就是军营的生活 混在部队的流行顺口溜 战场上的笑话,哈哈~~ 三则士兵笑话 美国将军的退休奖励计划 军旅笑话四则 
===============================================
感情(32)
===============================================
男女关系的俏皮调侃 调侃婚恋青年的逗笑妙语段子 幽默逗趣的情恋妙语 幽默有趣的情恋漫话 情恋妙侃,细细品味,还真是这样 泡妹子的一些温馨小伎俩 让人内心无比感慨的母爱 幽默趣语,道出情感真谛 “大剩”的日子不好过啊 结婚的搞笑理由 很写实的幽默情感箴言 有点变味的情感幽默 笑侃婚姻,婚姻是什么? 专业角度看爱情 幽默趣语妙侃婚恋男女 经典极品婚恋妙语 闲聊感情男女,妙语连珠 幽默男女的感情雷语 谈情说爱的情感小幽默 婚恋如营销,更像你的工作 情侣对话,女问男答,答的好,答的妙 
===============================================
搞笑歌词(29)
===============================================
搞笑歌曲改编校园版 超搞笑的经典歌曲恶搞改编 2012年春节联欢晚会经典台词整理。 搞笑减肥版忘情水 唱衰房价的搞笑歌词 小趣味:歌词显示明星的职业潜力。 经典歌词逗乐我。 乡村爱情故事 搞笑台词大全 听不清歌词闹笑话 一组改编歌曲搞笑版 大兵小将 搞笑台词 听错了的歌词,居然还会这么搞笑 50条超级变态的网名 群主啊,你在哪里 太贴切了!金庸人物一人一首主题歌 国人醒醒 2009年春节联欢晚会经典台词和搞笑台词 09春晚十大经典台词 笑在幸运52 大哥(股市版) 越来越绝的歌名 
===============================================
顺口溜(27)
===============================================
卖老鼠药的爆强顺口溜 一组绕口令,练练你的嘴皮子 闲谈生活风趣顺口溜 来自生活的趣语顺口溜 误人俗语和雷人顺口溜 绕口令大全,难倒你的嘴 风趣的脑筋急转弯和顺口溜。 很油菜的拍马屁和顺口溜。 你和他讲道理,他和你耍流氓。 四大顺口溜锦集 有困难怎么办?很好办! 来自民间的世象描绘 搞笑短信顺口溜 教师是什么? 经典:现在大家都是这么说的~ 很具特色的四大理想 9个经典顺口溜 等咱有了孩儿 名人和凡人 关于男人和女人的顺口溜 让人怀念的80后顺口溜大全 
===============================================
女人(27)
===============================================
女人最拿手的事是让男人吃不消 和闺蜜聊天真搞笑 笑谈男女的有趣句段 女人,是一个不错的幽默话题 女人50年的幽默变迁 相亲节目的女嘉宾眼里,历史名人她们也不满意 精典趣话,小侃女人 彪悍的已婚妇女 写给妻子这片“药”的说明书 经典:婚后女人的“市场营销” 女人的妙喻和爱情“名人名言” 爆笑网语议女人 假如女人是本书 太太试衣服,太太不在家 女人的身材都用什么形容? 碰到这样的你就说“那一定很贵” 看下都用什么比喻女人身材。 厉害的可怕的女人们 女人有关的经典笑话 世俗生活,调侃女人 女人千万不要去整容 
===============================================
股市证券(21)
===============================================
三国人物的炒股众生相 改编诗词名篇话股市 股市跌跌不休,动物们都不淡定了 名句改编侃股市 借动物巧说股市 炒股可把人害惨了 股市里的三国,三国里的股市 搞笑广告股市版 搞笑诗词话股市 七嘴八舌议炒股 古诗里的股市:大盘依旧在,几只股票红 动物也炒股。 股市暴跌下之抠门省钱秘笈 股市底部特征 股市里面伤心的幽默 经典的股市笑话 散户在指数拍卖会上 A股的九个特点 北京欢迎你之股市版 董卓请客(股市版) 令狐去股市迟到 
===============================================
传说(13)
===============================================
吝啬中的极品--吝啬村 武侠里面蹲马步的姿势看门派 纪晓岚和地狱里的工程师 七个最短的鬼故事,据说曾经有个人看完吓死了 一双会勾魂的眼睛 潘姓人家的讣闻 魔王与公主(很难看懂哦) 让人目瞪口呆~~请托好下巴,别掉地上了 嫦娥一号升空后各方反应 神奇的印第安老人 十二星座最“屌”的一句话 唐僧写给悟空的信 前世是谁埋的我 
===============================================
小笑话(9)
===============================================
和推销员逗乐与赌城售货机。 幽默笑话6个,笑翻你~ 关于辉腾的笑话 小笑话大全 80个包你笑翻天 三个社会小笑话 很搞的小笑话 8个经典小笑话 新发现的五个小笑话 三个小笑话 
===============================================
爆笑笑话(7)
===============================================
看懂的都是流()氓,看不懂的学学怎么变成流()氓。 一个人笑死了原因是看了这条笑话 5个经典小笑话 幽默笑话,经典幽默笑话8个,哈哈~~ 一句话经典笑话暴笑集合 十个暴笑口误 5个爆笑笑话 
===============================================
求爱秘籍(6)
===============================================
史上最有趣的男女关系"自然定律" 爱情经典对白 超级感动!对老婆应该这样说话 你说听过的最雷人的分手词 不信你不笑!我曾经追过的女孩子 情人节祝福短信,个人收藏78条经典情人节短信,情人... 
===============================================
英语(5)
===============================================
爆笑英语翻译中国的三字经 拼音字母也搞怪 美国笑话精选 爱情感人语句 37句中国式英语 
===============================================
原创(4)
===============================================
课堂幽默:摩擦力太小和关你屁事 我看港台三级片 史记·80后通史

这也太夸张了吧??这样就把人家的数据都抓出来了??

呵呵,还没有呢,因为你会发现有的分类下是有分页的,现在只是打出了第一页的内容。

示例4:处理分页

接下来呢,为了避免有人去直接抓取人家的网页,我会贴局部代码,但是不会贴完整的代码了。当然,你能根据局部代码,整出完整的,那说明你聪明过人,偶也没有办法了。

其实,一个页面里,可以添加多个Watcher。

比如说,在笑话列表页面,再增加一下Watcher类似下面这样:

1
2
3
4
5
6
7
Watcher nextPage=new WatcherImpl();
QuickNameFilter<HtmlNode> nextPageFilter = new QuickNameFilter<HtmlNode>();
nextPageFilter.setNodeName("div");
nextPageFilter.setIncludeAttribute("class","next_page");
nextPage.setNodeFilter(nextPageFilter);
nextPage.addProcessor(new NextPageProcessor());
spider.addWatcher(nextPage);

就可以把后续页面都抓住了,抓住之后怎么处理呢?有这么个类NextPageProcessor:

1
2
3
4
5
6
7
8
9
10
11
12
13
public class NextPageProcessor implements Processor {
    @Override
    public void process(HtmlNode node) {
        FastNameFilter<HtmlNode> filter = new FastNameFilter<HtmlNode>(node);
        filter.setNodeName("a");
        List<HtmlNode> aList = filter.findNodeList();
        for (HtmlNode a : aList) {
            if(a.getAttribute("href").startsWith("list")){
                JokejiTest.processUrl("http://www.jokeji.cn/"+a.getAttribute("href"));
            }
        }
    }
}

就是把翻到的页找出来,执行同样的处理,就可以了。运行一下,乖乖,所有的分类及分类下的标题都打印出来了。

示例5:具体的笑话的抓取

具体的笑话抓取,代码片断不能贴了,只说原理。

访问一个页面,很简单的就可以找到内容的节点,并抓取内容出来。

在列表的位置里不是有个打印笑话标题的处理么,只要把href中的连接读出来,传递到具体的笑话抓取的部分,就可以完成整个笑话网站的内容抓取。至于抓取到数据之后你是打印一下就好还是存放数据库还是....想干啥干啥,那就是看你自己的了。

示例6:给TinySpider增加多线程处理

值得注意的是,如果要处理的网站有防爬虫机制,这样子很快会触发对方反应的。这里假设没有,仅讨论如何增加多线程处理模式。


1
2
3
4
5
6
7
8
9
10
11
12
13
public class NextPageProcessor implements Processor {
    @Override
    public void process(HtmlNode node) {
        FastNameFilter<HtmlNode> filter = new FastNameFilter<HtmlNode>(node);
        filter.setNodeName("a");
        List<HtmlNode> aList = filter.findNodeList();
        for (HtmlNode a : aList) {
            if(a.getAttribute("href").startsWith("list")){
                JokejiTest.processUrl("http://www.jokeji.cn/"+a.getAttribute("href"));
            }
        }
    }
}

没有增加多线程处理的模式,是上面的这个样子。如何把它处理成多线程模式呢?SoEasy,首先增加一个对线程组的工程依赖。

1
2
3
4
5
<dependency>
    <groupId>org.tinygroup</groupId>
    <artifactId>threadgroup</artifactId>
    <version>${project.version}</version>
</dependency>

接下来,把上面的类重构成下面的样子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class NextPageProcessor implements Processor {
    @Override
    public void process(HtmlNode node) {
        FastNameFilter<HtmlNode> filter = new FastNameFilter<HtmlNode>(node);
        filter.setNodeName("a");
        List<HtmlNode> aList = filter.findNodeList();
        MultiThreadProcessor processPages = new MultiThreadProcessor("DownPage");
        for (HtmlNode a : aList) {
            if(a.getAttribute("href").startsWith("list")){
                processPages.addProcessor(new PageProcessor("http://www.jokeji.cn/"+a.getAttribute("href")));
            }
        }
        processPages.start();
    }
    class PageProcessor extends AbstractProcessor{
        private final String url;
        public PageProcessor(String url) {
            super("PageProcessor");
            this.url=url;
        }
        protected void action() throws Exception {
            JokejiTest.processUrl(url);
        }
    }
}

运行一看,下载页面确实已经变成多线程的了。

示例7:TinySpider与分布式集成

Tiny框架有个特点,就是干啥的就是干啥的,比如示例6当中,解决多线程的,有个专门的线程组工程来解决,网络爬虫只专注于网络爬虫机制相关的内容。那么要做分布式,也是一样子,Tiny有个专门的分布式工程。引入就可以加入分布式机制。

要把单机的TinySpider变成分布式的,首先要解决的一个问题就是UrlRepository的问题,UrlRepository是避免URL被重复处理的机制,保存有所有已经处理过的URL列表。那可以用各种方式来写这个URL仓库,可以用数据库,可以用缓冲,或者其它复杂的手段来现。

接下来就如何进行分布式抓取了:

先来开发个工人:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class WorkerPage extends AbstractWorker {
    private static final long serialVersionUID = 5873591269002335547L;
 
    public <span></span>WorkerPage<span></span>() throws RemoteException {
        super("page");
    }
 
    public Warehouse doWork(Work work) throws RemoteException {
        List<String>urls=work.getInputWarehouse().get("urls")
        for (String url:urls) {
            JokejiTest.processUrl(url);
        }
        return null;
    }
}

工人从输入仓库里拿出url列表,然后循环处理之。

然后要实现一个任务分解器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class UrlSplitter implements WorkSplitter {
    private static final long serialVersionUID = 551260312611646323L;
    public List<Warehouse> split(Work work, List<Worker> workers) throws RemoteException {
        List<Warehouse> list = new ArrayList<Warehouse>();
        List<String>urls=work.getInputWarehouse().get("urls");
        long start = 0;
        long end = urls.size()-1;;
        long count = urls.size();
        long step = count / workers.size();
        for (int i = 0; i < workers.size(); i++) {
            Warehouse subInputWarehouse = new WarehouseDefault();
            int e=0;
            if (i == workers.size() - 1) {
                e=end;
            } else {
                e= step * (i + 1);
            }
            subInputWarehouse.put("urls", urls.subList(step * i + start,e);
            list.add(subInputWarehouse);
        }
        return list;
    }
}

上面的任务就根据工人数据对要处理的url进行分解,分解成多个仓库。

接下来就是构建主任务中心了:

1
2
3
4
5
6
7
8
9
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
    JobCenter jobCenter = new JobCenterLocal();
    JobCenter center = new JobCenterRemote();
    for (int i = 0; i < 5; i++) {
        center.registerWorker(new WorkerPage());
    }
    Foreman pageForeman = new ForemanSelectAllWorker("page", new PageSplitter());
    center.registerForeman(pageForeman);
}

当然也可以在很多台计算机上都增加工人进来:

1
2
3
4
5
6
7
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
    JobCenter jobCenter = new JobCenterRemote();
    JobCenter center = new JobCenterRemote();
    for (int i = 0; i < 5; i++) {
        center.registerWorker(new WorkerPage());
    }
}
注意,上面的代码不同之处,在于一个是 JobCenterLocal和JobCenterRemote,Local相当于服务器,Remote相当于客户端,因此,只能有一个Local,可以有多个Remote。

上面把分布式的工作做好准备了,接下来进行分布式调用:

还是修改PrintJokejiProcessor 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class PrintJokejiProcessor implements Processor {
    public void process(HtmlNode node) {
        FastNameFilter<HtmlNode> filter = new FastNameFilter<HtmlNode>(node);
        filter.setNodeName("a");
        List<HtmlNode> aList = filter.findNodeList();
        List<String>urls=new ArrayList<String>();
        for (HtmlNode a : aList) {
            urls.add("http://www.jokeji.cn/"+a.getAttribute("href"));
        }
        Warehouse inputWarehouse = new WarehouseDefault();
        Work work = new WorkDefault("page", inputWarehouse);
        inputWarehouse.put("urls",urls);
        Warehouse outputWarehouse = center.doWork(work);
        JobCenter center = new JobCenterRemote();
        center.doWork(work);
    }
}



如此,就可以通过N台机器来共同完成页面抓取了。

相对前面的例子,确实用分布式,内容要多一些,但是应该还好了,代码行不多,只是概念多了一点,因此要去学习分布式计算相关的知识了:

http://my.oschina.net/tinyframework/blog/196486

http://my.oschina.net/tinyframework/blog/196373

结尾

上面的类名,方法名,变量名都是随便取的,重构之。一个完整的网站内容抓取就算完工了。最后统计了一下源代码,不到200行。import语句比真正干活的代码还多,真正干活的在方法中的语句也就100行左右。

网友评论

登录后评论
0/500
评论
悠悠悠然然
+ 关注