Fork me on GitHub
Abot 爬虫

Abot 爬虫分析-整体结构

1. 引言

在Github 上搜索下Web Crawler 有上千个开源的项目,但是C#的仅仅只有168 个,相比于Java 或者Python 确实少的可怜。如果按照Stars 排名。可以看到

image

排在第一位的是一个叫Abot的爬虫。通过这两天的测试,发现Abot是一个非常轻巧的爬虫。非常适合.Net程序员入门爬虫技术。

在上一篇博文中,已经简单的介绍了如何使用Abot爬取博客园的新闻数据。今天给大家介绍下Abot的整体结构。

 

2. 整体结构

Abot的项目非常简单,核心的只有一个Project,但是里面已经包含了线程调度、Html 解析等核心模块。Abot的入口是PoliteWebCrawler,只需要它的一个Instance就可以启动爬虫。

整体的爬取流程大概是这样子的,以爬取博客园新闻数据为例:

image

上图中 绿色的箭头表示线程从Url Repository获取需要爬取的Url, 黑色的箭头表示线程将未爬取Url放入Url Repository。

主要的模块有:

1) Url Repository 存储所有需要爬取的Url,底层的实现采用了ConcurrentQueue,因此是线程安全的,也满足了先进先出的规则。

2) Thread Manager 管理所有的爬取线程,线程个数默认是当前处理器的个数,也可以通过Config 指定。

3) Robots 处理robots.txt 的模块,Abot 直接封装了NRobotsPatched 来解析robots.txt

4) LinkParser解析当前爬取到的page 中的链接,Abot 很大程度上利用了HtmlAgilityPack

5) Crawled Url Repository 存储已经爬取的Url,Abot 内部有多个实现

6) Http download 采用了HttpWebRequest 和 HttpWebResponse

7) Memory Monitor 主要是监控内存使用等等,可以通过Config设置爬虫的内存使用上限等

8) Event 相关,主要是在适当的时候触发像Start Crawl 等事件

 

这是Abot的代码目录

image

3. 总结

本文主要介绍下Abot 的整体结构,从代码量来看还是非常的轻巧,但是里面具体的实现还是有不少细节性的东西。

对于.Net 程序员是个非常好的学习项目。以后再给大家分析下具体模块的实现。

posted on 2016-05-13 09:40  HackerVirus  阅读(3322)  评论(0编辑  收藏  举报