爬虫框架YayCrawler

各位好!从今天起,我将用几个篇幅的文字向大家介绍一下我的一个开源作品——YayCrawler,其在GitHub上的网址是:https://github.com/liushuishang/YayCrawler,欢迎大家关注和反馈。

YayCrawler是一个基于WebMagic开发的分布式通用爬虫框架,开发语言是Java。我们知道目前爬虫框架很多,有简单的,也有复杂的,有轻量型的,也有重量型的。您也许会问:你这个爬虫框架的优势在哪里呢?额,这个是一个很重要的问题!在这个开篇中,我先简单的介绍一下我这个爬虫框架的特点,后面的章幅会详细介绍并讲解它的实现,一图胜千言:

1、分布式:YayCrawler就是一个大哥(Master)多个小弟(Worker)的架构(这种结构才是宇宙的真理),当然大哥还有一个小秘(Admin)和外界交往。

2、通用性:我们很多时候需要爬取不同网站的数据,各个网站的结构和内容都有很大的差别,基本上大部分人都是遇到一个网站写一份代码,没法做到工具的复用。YayCrawler就是想改变这种情况,把不同的部分抽象出来,用规则来指导爬虫做事。也就是说用户可以在界面上配置如何抓取某个页面的数据的规则,等爬虫在爬取这个页面的时候就会用这个事先配置好的规则来解析数据,然后把数据持久化。

3、可扩展的任务队列:任务队列由Redis实现,根据任务的状态有四种不同的任务队列:初始、执行中、成功、失败。您也可以扩展不同的任务调度算法,默认是公平调度。

4、可定义持久化方式:爬取结果中,属性数据默认持久化到MongoDB,图片会被下载到文件服务器,当然您可以扩展更多的存储方式。

5、稳定和容错:任何一个失败的爬虫任务都会重试和记录,只有任务真正成功了才会被移到成功队列,失败会有失败的原因描述。

6、反监控组件:网站为了防止爬虫也是煞费苦心,想了一系列的监控手段来反爬虫。作为对立面,我们自然也要有反监控的手段来保障我们的爬虫任务,目前主要考虑的因素有:cookie失效(需要登陆)、刷验证码、封IP(自动换代理)。

7、可以对任务设置定时刷新,比如隔一天更新某个网站的数据。

……

上面说了一大堆优点的目的只有一个:希望您能有兴趣继续看下去,哈哈。

言归正传,本文作为开篇,只是一个总览,现在我们来整理一下后续文章的结构安排:

  1. 开源通用爬虫框架YayCrawler-框架的运行机制
  2. 开源通用爬虫框架YayCrawler-页面的抽取规则定义
  3. 开源通用爬虫框架YayCrawler-任务队列详解
  4. 开源通用爬虫框架YayCrawler-页面下载器详解
  5. 开源通用爬虫框架YayCrawler-规则解析器详解
  6. 开源通用爬虫框架YayCrawler-数据持久化详解
  7. 开源通用爬虫框架YayCrawler-反监控组件详解
  8. 开源通用爬虫框架YayCrawler-案例演示
  9. 开源通用爬虫框架YayCrawler-待完善的功能

最新文章

  1. [AlwaysOn Availability Groups]健康模型 Part 1——概述
  2. ubuntu_nfs搭建
  3. error C2664: 'TextOutW' : cannot convert parameter 4 from const char [5]' to LPCTSTR
  4. LNK1104:无法打开文件'mfc90.lib“
  5. Java并发编程-可重入锁
  6. SQL循环
  7. CSS3滤镜filter浅析
  8. SEO之网站关键词的优化 :首页,内页关键字,长尾关键字
  9. Shell脚本了解
  10. Python 下划线
  11. 11.全局变量(static)
  12. 微信小程序登录(包括获取不到unionid的情况)
  13. Lucas定理学习笔记(没有ex_lucas)
  14. python实现斐波那契数列
  15. centos6.5 系统乱码解决 i18n --摘自http://blog.csdn.net/yangkai_hudong/article/details/19033393
  16. 03_java基础(三)之第一个程序与开发工具的安装
  17. SDIBT 2345 (3.2.1 Factorials 阶乘)
  18. 【C++】不要想当然使用resize
  19. css3实现小箭头,各种图形
  20. go 第一个项目

热门文章

  1. Lintcode--006(交叉字符串)
  2. 超实用--删除MYSQL中指定的数据的全部表
  3. 为什么memset的第二个参数不把int替换成char
  4. CONTEST45 呵呵呵呵呵
  5. Memcached和Redis异同
  6. Delphi 调用系统中的计算器、记事本、画图软件方法
  7. poj3708:函数式化简+高精度进制转换+同余方程组
  8. 常用的js对象扩展方法
  9. vagrant拷贝后vagrant file需要加的配置
  10. HttpServletRequest对象方法的用法(转)