禅宗花园...迷失的佛

人生在世,一件也少不得,到了那结束时,一件也用不着。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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 程序员是个非常好的学习项目。以后再给大家分析下具体模块的实现。

 

欢迎访问我的个人网站 51zhang.net 网站还在不断开发中…

posted on 2016-05-10 17:48  禅宗花园...迷失的佛  阅读(2327)  评论(3编辑  收藏  举报