网络爬虫,一般用在全文检索或内容获取上面。
Tiny框架对此也做了有限的支持,虽然功能不多,但是想做全文检索或从网页上获取数据也是非常方便的。
框架特性
- 强大的节点过滤能力
- 支持post与get两种数据提交方式
- 避免网页重复处理功能
- 支持多站点内容抓取功能
- 较强的Html容错处理
框架设计
网络爬虫
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 |
|
一个爬虫,至少需要包含一个站点访问器,站点访问器用于对URL进行访问。如果没有匹配的站点访问器,URL将被忽略,不做继续处理。
一个爬虫至少需要包含一个监视器,监视器用于对URL中的内容进行过滤,并对命中的节点进行处理。如果没有监视器,爬虫爬回的内容就没有任何价值。
一个爬虫至少需要一个Url仓库,Url仓库用于对ur进行判断,是否已经抓取并处理过。如果没有url仓库,将无法判断url是否处理过,在非常多的时候,会造成死循环,无法退出。
当然,一个爬虫,也必须能够对url进行处理。
网站访问者
由于一个爬虫可以有多个站点访问器,因此,需要有isMatch方法告诉爬虫是否应该由自己进行处理。
访问方式,可以设置是通过get还是post方式获取数据。
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 |
|
url仓库用于对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 |
|
一个监视器,必须一个节点过滤器,但是可以有多个处理器。
处理器
1 2 3 4 5 6 7 8 |
|
处理器非常简单, 就是对命中的节点进行处理即可。
示例
通过访问[http://www.oschina.net/question?catalog=1]可以看到,里面有许多技术问答的问题。
下面我们就来编写一段程序来把这些标题打出来:
编写爬虫
1 2 3 4 5 6 7 8 9 10 11 |
|
编写处理器
1 2 3 4 5 6 7 8 9 10 11 |
|
运行结果
输出结果可能与结果不相同,因为数据是一直在变化的。
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 |
|
小结
从示例可以看出,要从网页里获取数据,确实是非常容易的一件事情,只寥寥几行(20行左右),就采集出了我们想要的数据,要想抓出更多的数据,只要逐层细化分析即可。