爬虫程序定时执行和监控示例

爬虫程序定时执行和监控示例

 

 

 

 

简介

我们的爬虫程序在执行过程中,可能需要满足以下条件:

1、可以每天定时执行,爬取指定电商等 站内容。

2、可以对分布式爬虫进行监控,当爬虫程序挂掉之后,可以通知管理员。

 

下面我们来介绍如何实现这两个功能。

 

注意:

这里我们主要演示定时执行和监控功能,所以爬虫程序只是伪代码。如果想要详细了解如何实现 络爬虫,可以参考如下一些文章:

http://blog.csdn.net/u011204847/article/category/6210222

 

 

 

 

定时执行


Quartz调度框架


简介:

Quartz是一个完全由java编写的开源作业调度框架。尽管Quartz框架整合了许多额外功能, 但就其简易形式,你会发现它非常易用。简单地创建一个实现org.quartz.Job接口的java类。

Job接口包含唯一的方法:

在你的Job接口实现类里面,添加一些逻辑到execute()方法。一旦你配置好Job实现类并设定好调度时间表,Quartz将密切注意剩余时间。当调度程序确定该是通知你的作业的时候,Quartz框架将调用你Job实现类(作业类)上的execute()方法并允许做它该做的事情。无需 告任何东西给调度器或调用任何特定的东西。仅仅执行任务和结束任务即可。如果配置你的作业在随后再次被调用,Quartz框架将在恰当的时间再次调用它。

 

 

使用格式

首先Quartz Cron 表达式支持到七个域

 

名称  是否必须    允许值 特殊字符

秒   是   0-59    , – * /

分   是   0-59    , – * /

时   是   0-23    , – * /

日   是   1-31    , – * / L W

月   是   1-12 或 JAN-DEC  , – * /

周   是   1-7 或 SUN-SAT   , – * / L #

年   否   空 或 1970-2099   , – * /

 

 

结构,以这个为例

0 11 11 11 11 每年的11月11 11点11分触发(光棍节)

 

可以看到基本结构是   秒_分_小时_日_月_[周]_[年] 后面的周和年是可选的

 

其次,通配符,主要的有星 (*);问 (;减 (-);逗 (,);斜杠(/);L字母;W字母;井 (#).

 

通配符含义:

星 :表示任意时刻

问 :只能在日或周字段上使用,如官方文档解释的那样,问 (的作用是指明该字段‘没有特定的值

减 :范围,如 1-5秒

逗 :列表,如 1,5,10 秒

斜杠:等步长序列,如3/13秒 表示 3,16,29,42,55,3,16…

L:仅在日和周上支持,表示允许的最后一个值,注意不要让范围和列表与L连用

W:工作日

井 :为给定月份指定具体的工作日实例。把“MON#2”放在周内日期字段中,表示把任务安排在当月的第二个星期一。

 

使用示例:

 

 

定时器实现爬虫程序定时:

执行SpiderTimer 的打印结果:

 

 

 

监控流程

1、我们主要使用Zookeeper中临时节点的特性实现对爬虫程序的监控。临时节点默认生存期为40秒(也可以在代码中自定义)。

2、我们创建一个监视器程序,监视器永不停止并且一直监控Zookeeper中临时节点是否存在,如果爬虫程序挂了,那么临时节点会在指定时间消失,监视器发现没有临时节点或者有新增节点后,可以执行代码(例如发邮箱等)通知管理员。

 

程序示例

 

注意程序运行需要先开启

  • <groupId>org.apache.curator</groupId>
  • <artifactId>curator-framework</artifactId>
  • <version>2.8.0</version>
  • </dependency>
  •  

    声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2016年4月4日
    下一篇 2016年4月4日

    相关推荐