/abcrawler

a better cralwer

Primary LanguageC++

--系统简介--
--模块介绍--
----evcrawler
------基于libevent中的evhttp的抓取器
      --支持按照host的压力控制
      --支持dns cache
      --支持多线程的异步并发抓取
      --支持抓取状态统计
      --支持抓取数据持久化
----sender
------负责把抓取到的数据发送到远程接受者(link_db_updater.py和page_db_updater)
      evcrawler把抓取到的数据写入以filelinkblock形式组织的数据中,sender负责读取filelinkblock中的数据,发送给接受者。
      sender的特性如下:
      --支持进度记录,进度文件在offset目录下
      --支持区分消息类型,目前只有一类消息,即'event 0 # 0'
      --支持消息回滚(抓取系统中没有用到这个特性)
      --可以监控offset中的进度文件,来判断下游接受者是否工作正常,存在消息延迟。
----link_db_updater.py
------负责接受sender发送的网页数据,分析网页数据,更新此次抓取的url信息,并分析页面,提取新发现的url并插入到link_info表中
------link_db_updater.py使用到了link_info表中的uniq_url_sign索引,该索引用于url去重,和选取出refer_sign对应的url。
----page_db_updater.py
------负责接受sender发送的网页数据,以md5sum(url)为key,把网页数据以及meta信息插入到mongodb中
----selector.py
------定期读取evcrawler中的统计信息,根据每个host的统计信息,从link_info表中选取该host下的连接,发送到evcrawler中进行抓取
      --selector会记录每个host选取到的最大url_no,每次会以此最大的url_no开始来选取待抓取的url.(当前的调度策略是仅仅抓取新连接)
------selector.py使用到了link_info表中的host_no索引。
----stator.py
------供调试所用,可以显示evcrawler中各个站点的待抓取队列长度,当前并发抓取数目等信息
--部署说明--
  -1- 把该域名的种子url插入到数据库的host_info和link_info表中
  -2- 在evcrawler的配置host_visit_interval.config.json中增加某个域名的配置信息,重启evcrawler
TODO
增加每分钟的抓取量控制,与并发控制相结合

Join the chat at https://gitter.im/ArkEngine/abcrawler