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

  • 相关阅读:
    mysql 数据库初识
    Python3进行RSA2加密、解密、签名
    jenkins一次构建两次触发job问题
    docker 端口被占用问题解决
    jacoco 的使用及与jenkins的集成
    python 学习笔记二 (列表推导式)
    python 学习笔记一 (数据结构和算法)
    请求超时及重试的设置
    python 中 str与bytes的转换
    JS模块化
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/5488306.html
Copyright © 2020-2023  润新知