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

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

  • 相关阅读:
    近两年目标
    Spring使用ajax异步上传文件
    java注解
    js 点击文本框,预览选择图片
    修改服务器系统时间(包括hive)
    队列原理
    EMR目录
    2个CDH的hive数据同步
    CDH建表字符集问题
    EMR的fair-scheduler.xml
  • 原文地址:https://www.cnblogs.com/VectorZhang/p/5478711.html
Copyright © 2011-2022 走看看