Abot 爬虫分析-整体结构
1. 引言
在Github 上搜索下Web Crawler 有上千个开源的项目,但是C#的仅仅只有168 个,相比于Java 或者Python 确实少的可怜。如果按照Stars 排名。可以看到

排在第一位的是一个叫Abot的爬虫。通过这两天的测试,发现Abot是一个非常轻巧的爬虫。非常适合.Net程序员入门爬虫技术。
在上一篇博文中,已经简单的介绍了如何使用Abot爬取博客园的新闻数据。今天给大家介绍下Abot的整体结构。
2. 整体结构
Abot的项目非常简单,核心的只有一个Project,但是里面已经包含了线程调度、Html 解析等核心模块。Abot的入口是PoliteWebCrawler,只需要它的一个Instance就可以启动爬虫。
整体的爬取流程大概是这样子的,以爬取博客园新闻数据为例:

上图中 绿色的箭头表示线程从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的代码目录

3. 总结
本文主要介绍下Abot 的整体结构,从代码量来看还是非常的轻巧,但是里面具体的实现还是有不少细节性的东西。
对于.Net 程序员是个非常好的学习项目。以后再给大家分析下具体模块的实现。
欢迎访问我的个人网站 51zhang.net 网站还在不断开发中…
Abot 爬虫分析-整体结构的更多相关文章
- Abot 爬虫
Abot 爬虫分析-整体结构 1. 引言 在Github 上搜索下Web Crawler 有上千个开源的项目,但是C#的仅仅只有168 个,相比于Java 或者Python 确实少的可怜.如果按照St ...
- 利用Abot爬虫和visjs 呈现漫威宇宙
1. 引言 最近接触Abot爬虫也有几天时间了,闲来无事打算从IMDB网站上爬取一些电影数据玩玩.正好美国队长3正在热映,打算爬取漫威近几年的电影并用vis这个JS库呈现下漫威宇宙的相关电影. Abo ...
- Abot爬虫和visjs
1. 引言 最近接触Abot爬虫也有几天时间了,闲来无事打算从IMDB网站上爬取一些电影数据玩玩.正好美国队长3正在热映,打算爬取漫威近几年的电影并用vis这个JS库呈现下漫威宇宙的相关电影. Abo ...
- 10- python 网络爬虫分析
Python 网络爬虫简单分析 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print re ...
- python爬虫——分析天猫iphonX的销售数据
01.引言 这篇文章是我最近刚做的一个项目,会带领大家使用多种技术实现一个非常有趣的项目,该项目是关于苹果机(iphoneX)的销售数据分析,是网络爬虫和数据分析的综合应用项目.本项目会分别从天猫和京 ...
- 检测2个url的不同之处(爬虫分析接口)
就是简单的检测2个url的不同之处,在做爬虫时,要分析接口地址的不同之处,靠自己的眼睛有点累,所以写了一个小程序,不喜勿喷 #测试数据 a = "https://list.tmall.com ...
- 爬虫系列1:python简易爬虫分析
决定写一个小的爬虫系列,本文是第一篇,讲爬虫的基本原理和简易示例. 1.单个网页的简易爬虫 以下爬虫的主要功能是爬取百度贴吧中某一页面的所有图片.代码由主要有两个函数:其中getHtml()通过页面u ...
- python爬虫分析报告
在python课上布置的作业,第一次进行爬虫,走了很多弯路,也学习到了很多知识,借此记录. 1. 获取学堂在线合作院校页面 要求: 爬取学堂在线的计算机类课程页面内容. 要求将课程名称.老师.所属学校 ...
- python&php数据抓取、爬虫分析与中介,有网址案例
近期在做一个网络爬虫程序.后台使用python不定时去抓取数据.前台使用php进行展示 站点是:http://se.dianfenxiang.com
随机推荐
- Direct2D教程(外篇)环境配置
2014年世界杯首场淘汰赛马上开始了,闲着没事,整理以前的博客草稿打发时间,意外的发现这篇文章,本来是打算加入到Direct2D那个系列的,不知道为什么把它给遗漏了.环境配置,对于熟手来说,不是什么重 ...
- 自定义 Azure Table storage 查询过滤条件
本文是在Azure Table storage 基本用法一文的基础上,介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table storage ...
- ASP.NET Core: 全新的ASP.NET !
背景 最新版本的 ASP.NET 叫做 ASP.NET Core (也被称为 ASP.NET 5) 它颠覆了过去的 ASP.NET. 什么是 ASP.NET Core? ASP.NET Core ...
- linux下进程间通信
信号 信号是进程间相互传递消息的一种方法,只是用来通知某进程发生了什么事件,并不给进程传递任何数据. #include <sys/types.h> #include <unistd. ...
- ehcache2拾遗之write和load
问题描述 在cache系统中writeThrough和writeBehind是两个常用的模式. writeThrough是指,当用户更新缓存时,自动将值写入到数据源. writeBehind是指,在用 ...
- 自已写的Json序列化方法,可以序列话对象的只读属性
/* * by zhangguozhan 2015/1/5 * P2B.Common.CJson.ConvertJson.ObjectToJson<SenderDomainModel>方法 ...
- 爱上MVC~ajax调用分部视图session超时页面跳转问题
回到目录 这个问题出现了很多年了,都没有解决,问题是这样的,有一个需要授权才可以访问的分部视图,在一个view中使用ajax的方法去调用它,然后更新页面的局部DIV,这时,如果你长时间不操作,sess ...
- 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例
在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...
- Android中的Activity相关知识总结
一.什么是Activity? 简单理解:Activity是Android组件中最基本也是最为常见用的四大组件之一.是一个与用户交互的系统模块,一个Activity通常就是一个单独的屏幕(页面), 它上 ...
- Android点击效果
我们在开发网站时,会发现当我们添加<a/>标签后,标签有一个点击效果,比如颜色变化,这样开看起来用户体验会很棒,那么在我们的Android开发中如何加入这样的效果呢?本篇就为大家揭开它的神 ...