版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_15153911/article/details/82949165
企业数据爬虫项目(艳辉VIP项目)
第一天:下载解析网站页面
第二天:多线程定时启动爬虫
一个爬虫项目,会涉及到数据存储,Queue队列,缓存使用,多线程爬取,定时任务爬取,解决频繁抓取IP被封问题,zookeeper分布式监控节点,邮件提醒等内容。
这里我们探讨其中两个问题,一是多线程,一是定时器。
// 固定线程池
private ExecutorService newFixedThreadPool = Executors
.newFixedThreadPool(Integer.parseInt(LoadPropertyUtil.getConfig("threadNum")));
newFixedThreadPool.execute(new Runnable() {
public void run() {
//业务。。。
}
});
Java通过Executors提供四种线程池,分别为:
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
//获取默认调度器
Scheduler defaultScheduler = StdSchedulerFactory.getDefaultScheduler();
//开启调度器
defaultScheduler.start();
//被调度的任务
JobDetail jobDetail = new JobDetail("url-job", Scheduler.DEFAULT_GROUP, AddUrlJob.class);
//定时执行任务
// CronTrigger trigger = new CronTrigger("url-job", Scheduler.DEFAULT_GROUP, "00 11 18 * * ?");
CronTrigger trigger = new CronTrigger("url-job", Scheduler.DEFAULT_GROUP, "0/10 * * * * ?");
//添加调度任务
defaultScheduler.scheduleJob(jobDetail , trigger);
这里用了quartz定时,每10秒运行AddUrlClass类,即是将url添加到队列中,让爬虫爬取url地址的内容。
需要下载源码可点击 艳学网
下载源码后,记住分享哟!
第一步:微信关注公众号艳学网!
第二步:关注后打开菜单“艳辉福利”——“java福利”,转发文章至朋友圈。
长按自动识别二维码,即可关注微信公众号“艳学网”