企業資料爬蟲專案(二)

豔學網發表於2018-10-06

第一天:下載解析網站頁面

第二天:多執行緒定時啟動爬蟲

一個爬蟲專案,會涉及到資料儲存,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福利”,轉發文章至朋友圈。

長按自動識別二維碼,即可關注微信公眾號“豔學網”
在這裡插入圖片描述

相關文章