Ejemplo n.º 1
0
Archivo: app.go Proyecto: kaca/pholcus
// Offline 模式下中途终止任务
func (self *Logic) Stop() {
	status.Crawl = status.STOP
	Pholcus.Crawls.Stop()
	scheduler.Sdl.Stop()
	reporter.Log.Stop()

	// 总耗时
	takeTime := time.Since(cache.StartTime).Minutes()

	// 打印总结报告
	log.Println(` *********************************************************************************************************************************** `)
	log.Printf(" * ")
	log.Printf(" *                               !!任务取消:下载页面 %v 个,耗时:%.5f 分钟!!", cache.GetPageCount(0), takeTime)
	log.Printf(" * ")
	log.Println(` *********************************************************************************************************************************** `)

	// 标记结束
	self.finish <- true
}
Ejemplo n.º 2
0
// Offline 模式下中途终止任务
func (self *Logic) Stop() {
	self.status = status.STOP
	self.CrawlPool.Stop()
	self.Scheduler.Stop()

	// 总耗时
	takeTime := time.Since(cache.StartTime).Minutes()

	// 打印总结报告
	logs.Log.Informational(` *********************************************************************************************************************************** `)
	logs.Log.Informational(" * ")
	logs.Log.Notice(" *                               !!任务取消:下载页面 %v 个,耗时:%.5f 分钟!!", cache.GetPageCount(0), takeTime)
	logs.Log.Informational(" * ")
	logs.Log.Informational(` *********************************************************************************************************************************** `)

	self.LogRest()

	// 标记结束
	self.finishOnce.Do(func() { close(self.finish) })
}
Ejemplo n.º 3
0
Archivo: app.go Proyecto: npk/pholcus-1
// Offline 模式下中途终止任务
func (self *Logic) Stop() {
	self.status = status.STOP
	self.Node.Crawls.Stop()
	scheduler.Sdl.Stop()

	// 总耗时
	takeTime := time.Since(cache.StartTime).Minutes()

	// 打印总结报告
	log.Println(` *********************************************************************************************************************************** `)
	log.Printf(" * ")
	log.Printf(" *                               !!任务取消:下载页面 %v 个,耗时:%.5f 分钟!!", cache.GetPageCount(0), takeTime)
	log.Printf(" * ")
	log.Println(` *********************************************************************************************************************************** `)

	reporter.Log.Stop()

	// 标记结束
	self.finishOnce.Do(func() { close(self.finish) })
}
Ejemplo n.º 4
0
// 任务执行
func (self *Logic) goRun(count int) {
	// 执行任务
	var i int
	for i = 0; i < count && self.Status() != status.STOP; i++ {
	pause:
		if self.IsPause() {
			time.Sleep(1e9)
			goto pause
		}
		// 从爬行队列取出空闲蜘蛛,并发执行
		c := self.CrawlPool.Use()
		if c != nil {
			go func(i int, c crawl.Crawler) {
				// 执行并返回结果消息
				c.Init(self.SpiderQueue.GetByIndex(i)).Start()
				// 任务结束后回收该蜘蛛
				self.CrawlPool.Free(c)
			}(i, c)
		}
	}
	// 监控结束任务
	for ii := 0; ii < i; ii++ {
		s := <-cache.ReportChan
		if (s.DataNum == 0) && (s.FileNum == 0) {
			continue
		}
		logs.Log.Informational(" * ")
		switch {
		case s.DataNum > 0 && s.FileNum == 0:
			logs.Log.App(" *     [任务小计:%s | KEYIN:%s]   共采集数据 %v 条,用时 %v!\n",
				s.SpiderName, s.Keyin, s.DataNum, s.Time)
		case s.DataNum == 0 && s.FileNum > 0:
			logs.Log.App(" *     [任务小计:%s | KEYIN:%s]   共下载文件 %v 个,用时 %v!\n",
				s.SpiderName, s.Keyin, s.FileNum, s.Time)
		default:
			logs.Log.App(" *     [任务小计:%s | KEYIN:%s]   共采集数据 %v 条 + 下载文件 %v 个,用时 %v!\n",
				s.SpiderName, s.Keyin, s.DataNum, s.FileNum, s.Time)
		}

		self.sum[0] += s.DataNum
		self.sum[1] += s.FileNum
	}

	// 总耗时
	self.takeTime = time.Since(cache.StartTime)
	var prefix = func() string {
		if self.Status() == status.STOP {
			return "任务中途取消:"
		}
		return "本次"
	}()
	// 打印总结报告
	logs.Log.Informational(" * ")
	logs.Log.Informational(` *********************************************************************************************************************************** `)
	logs.Log.Informational(" * ")
	switch {
	case self.sum[0] > 0 && self.sum[1] == 0:
		logs.Log.App(" *                            —— %s合计采集【数据 %v 条】, 实爬URL【成功 %v 页 + 失败 %v 页 = 合计 %v 页】,耗时【%v】 ——",
			prefix, self.sum[0], cache.GetPageCount(1), cache.GetPageCount(-1), cache.GetPageCount(0), self.takeTime)
	case self.sum[0] == 0 && self.sum[1] > 0:
		logs.Log.App(" *                            —— %s合计采集【文件 %v 个】, 实爬URL【成功 %v 页 + 失败 %v 页 = 合计 %v 页】,耗时【%v】 ——",
			prefix, self.sum[1], cache.GetPageCount(1), cache.GetPageCount(-1), cache.GetPageCount(0), self.takeTime)
	case self.sum[0] == 0 && self.sum[1] == 0:
		logs.Log.App(" *                            —— %s无采集结果,实爬URL【成功 %v 页 + 失败 %v 页 = 合计 %v 页】,耗时【%v】 ——",
			prefix, cache.GetPageCount(1), cache.GetPageCount(-1), cache.GetPageCount(0), self.takeTime)
	default:
		logs.Log.App(" *                            —— %s合计采集【数据 %v 条 + 文件 %v 个】,实爬URL【成功 %v 页 + 失败 %v 页 = 合计 %v 页】,耗时【%v】 ——",
			prefix, self.sum[0], self.sum[1], cache.GetPageCount(1), cache.GetPageCount(-1), cache.GetPageCount(0), self.takeTime)
	}
	logs.Log.Informational(" * ")
	logs.Log.Informational(` *********************************************************************************************************************************** `)

	// 单机模式并发运行,需要标记任务结束
	if self.AppConf.Mode == status.OFFLINE {
		self.LogRest()
		self.finishOnce.Do(func() { close(self.finish) })
	}
}
Ejemplo n.º 5
0
// 任务执行
func (self *Logic) goRun(count int) {
	for i := 0; i < count && self.status != status.STOP; i++ {
		if self.status == status.PAUSE {
			time.Sleep(1e9)
			continue
		}
		// 从爬行队列取出空闲蜘蛛,并发执行
		c := self.CrawlPool.Use()
		if c != nil {
			go func(i int, c crawl.Crawler) {
				// 执行并返回结果消息
				c.Init(self.SpiderQueue.GetByIndex(i)).Start()
				// 任务结束后回收该蜘蛛
				self.CrawlPool.Free(c)
			}(i, c)
		}
	}

	// 监控结束任务
	sum := [2]uint{} //数据总数
	for i := 0; i < count; i++ {
		s := <-cache.ReportChan
		if (s.DataNum == 0) && (s.FileNum == 0) {
			continue
		}
		logs.Log.Informational(" * ")
		switch {
		case s.DataNum > 0 && s.FileNum == 0:
			logs.Log.Notice(" *     [输出报告 -> 任务:%v | 关键词:%v]   共输出数据 %v 条,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.DataNum, s.Time)
		case s.DataNum == 0 && s.FileNum > 0:
			logs.Log.Notice(" *     [输出报告 -> 任务:%v | 关键词:%v]   共下载文件 %v 个,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.FileNum, s.Time)
		default:
			logs.Log.Notice(" *     [输出报告 -> 任务:%v | 关键词:%v]   共输出数据 %v 条 + 下载文件 %v 个,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.DataNum, s.FileNum, s.Time)
		}
		logs.Log.Informational(" * ")

		sum[0] += s.DataNum
		sum[1] += s.FileNum
	}

	// 总耗时
	takeTime := time.Since(cache.StartTime).Minutes()

	// 打印总结报告
	logs.Log.Informational(` *********************************************************************************************************************************** `)
	logs.Log.Informational(" * ")
	switch {
	case sum[0] > 0 && sum[1] == 0:
		logs.Log.Notice(" *                            —— 本次合计抓取 %v 条数据,下载页面 %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", sum[0], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), takeTime)
	case sum[0] == 0 && sum[1] > 0:
		logs.Log.Notice(" *                            —— 本次合计抓取 %v 个文件,下载页面 %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", sum[1], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), takeTime)
	default:
		logs.Log.Notice(" *                            —— 本次合计抓取 %v 条数据 + %v 个文件,下载网页 %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", sum[0], sum[1], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), takeTime)
	}
	logs.Log.Informational(" * ")
	logs.Log.Informational(` *********************************************************************************************************************************** `)

	// 单机模式并发运行,需要标记任务结束
	if self.AppConf.Mode == status.OFFLINE {
		self.status = status.STOP
		self.finishOnce.Do(func() { close(self.finish) })
	}
}
Ejemplo n.º 6
0
// 任务执行
func (self *Logic) goRun(count int) {
	for i := 0; i < count && self.Status() != status.STOP; i++ {
	wait:
		if self.Status() == status.PAUSE {
			time.Sleep(1e9)
			goto wait
		}
		// 从爬行队列取出空闲蜘蛛,并发执行
		c := self.CrawlPool.Use()
		if c != nil {
			go func(i int, c crawl.Crawler) {
				// 执行并返回结果消息
				c.Init(self.SpiderQueue.GetByIndex(i)).Start()
				// 任务结束后回收该蜘蛛
				self.CrawlPool.Free(c)
			}(i, c)
		}
	}

	// 监控结束任务
	for i := 0; i < count && self.Status() != status.STOP; i++ {
		s := <-cache.ReportChan
		if (s.DataNum == 0) && (s.FileNum == 0) {
			continue
		}
		logs.Log.Informational(" * ")
		switch {
		case s.DataNum > 0 && s.FileNum == 0:
			logs.Log.Notice(" *     [输出报告 -> 任务:%v | 关键词:%v]   共输出数据 %v 条,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.DataNum, s.Time)
		case s.DataNum == 0 && s.FileNum > 0:
			logs.Log.Notice(" *     [输出报告 -> 任务:%v | 关键词:%v]   共下载文件 %v 个,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.FileNum, s.Time)
		default:
			logs.Log.Notice(" *     [输出报告 -> 任务:%v | 关键词:%v]   共输出数据 %v 条 + 下载文件 %v 个,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.DataNum, s.FileNum, s.Time)
		}
		logs.Log.Informational(" * ")

		self.sum[0] += s.DataNum
		self.sum[1] += s.FileNum
	}

	// 总耗时
	self.takeTime = time.Since(cache.StartTime).Minutes()
	var prefix = func() string {
		if self.Status() == status.STOP {
			return "任务中途取消:"
		}
		return "本次"
	}()
	// 打印总结报告
	logs.Log.Informational(` *********************************************************************************************************************************** `)
	logs.Log.Informational(" * ")
	switch {
	case self.sum[0] > 0 && self.sum[1] == 0:
		logs.Log.Notice(" *                            —— %s合计输出 %v 条数据,实爬URL %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", prefix, self.sum[0], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), self.takeTime)
	case self.sum[0] == 0 && self.sum[1] > 0:
		logs.Log.Notice(" *                            —— %s合计输出 %v 个文件,实爬URL %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", prefix, self.sum[1], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), self.takeTime)
	default:
		logs.Log.Notice(" *                            —— %s合计输出 %v 条数据 + %v 个文件,实爬URL %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", prefix, self.sum[0], self.sum[1], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), self.takeTime)
	}
	logs.Log.Informational(" * ")
	logs.Log.Informational(` *********************************************************************************************************************************** `)

	// 单机模式并发运行,需要标记任务结束
	if self.AppConf.Mode == status.OFFLINE {
		self.setStatus(status.STOP)
		self.LogRest()
		self.finishOnce.Do(func() { close(self.finish) })
	}
}
Ejemplo n.º 7
0
Archivo: app.go Proyecto: kaca/pholcus
// 任务执行
func (self *Logic) goRun(count int) {
	for i := 0; i < count && status.Crawl == status.RUN; i++ {
		// 从爬行队列取出空闲蜘蛛,并发执行
		c := Pholcus.Crawls.Use()
		if c != nil {
			go func(i int, c crawl.Crawler) {
				// 执行并返回结果消息
				c.Init(Pholcus.Spiders.GetByIndex(i)).Start()
				// 任务结束后回收该蜘蛛
				Pholcus.Crawls.Free(c.GetId())
			}(i, c)
		}
	}

	// 监控结束任务
	sum := [2]uint{} //数据总数
	for i := 0; i < count; i++ {
		s := <-cache.ReportChan
		if (s.DataNum == 0) && (s.FileNum == 0) {
			continue
		}
		log.Printf(" * ")
		switch {
		case s.DataNum > 0 && s.FileNum == 0:
			reporter.Log.Printf(" *     [输出报告 -> 任务:%v | 关键词:%v]   共输出数据 %v 条,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.DataNum, s.Time)
		case s.DataNum == 0 && s.FileNum > 0:
			reporter.Log.Printf(" *     [输出报告 -> 任务:%v | 关键词:%v]   共下载文件 %v 个,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.FileNum, s.Time)
		default:
			reporter.Log.Printf(" *     [输出报告 -> 任务:%v | 关键词:%v]   共输出数据 %v 条 + 下载文件 %v 个,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.DataNum, s.FileNum, s.Time)
		}
		log.Printf(" * ")

		sum[0] += s.DataNum
		sum[1] += s.FileNum
	}

	// 总耗时
	takeTime := time.Since(cache.StartTime).Minutes()

	// 打印总结报告
	log.Println(` *********************************************************************************************************************************** `)
	log.Printf(" * ")
	switch {
	case sum[0] > 0 && sum[1] == 0:
		reporter.Log.Printf(" *                            —— 本次合计抓取 %v 条数据,下载页面 %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", sum[0], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), takeTime)
	case sum[0] == 0 && sum[1] > 0:
		reporter.Log.Printf(" *                            —— 本次合计抓取 %v 个文件,下载页面 %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", sum[1], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), takeTime)
	default:
		reporter.Log.Printf(" *                            —— 本次合计抓取 %v 条数据 + %v 个文件,下载网页 %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", sum[0], sum[1], cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), takeTime)
	}
	log.Printf(" * ")
	log.Println(` *********************************************************************************************************************************** `)

	// 标记结束
	self.finish <- true
}
Ejemplo n.º 8
0
Archivo: app.go Proyecto: sunqb/pholcus
// 任务执行
func (self *Logic) goRun(count int) {
	for i := 0; i < count && status.Crawl == status.RUN; i++ {
		// 从爬行队列取出空闲蜘蛛,并发执行
		c := Pholcus.Crawls.Use()
		if c != nil {
			go func(i int, c crawl.Crawler) {
				// 执行并返回结果消息
				c.Init(Pholcus.Spiders.GetByIndex(i)).Start()
				// 任务结束后回收该蜘蛛
				Pholcus.Crawls.Free(c.GetId())
			}(i, c)
		}
	}

	// 监控结束任务
	sum := 0 //数据总数
	for i := 0; i < count; i++ {
		s := <-cache.ReportChan

		log.Printf(" * ")
		reporter.Log.Printf(" *     [结束报告 -> 任务:%v | 关键词:%v]   共输出数据 %v 条,用时 %v 分钟!\n", s.SpiderName, s.Keyword, s.Num, s.Time)
		log.Printf(" * ")

		if slen, err := strconv.Atoi(s.Num); err == nil {
			sum += slen
		}
	}

	// 总耗时
	takeTime := time.Since(cache.StartTime).Minutes()

	// 打印总结报告
	log.Println(` *********************************************************************************************************************************** `)
	log.Printf(" * ")
	reporter.Log.Printf(" *                            —— 本次抓取合计 %v 条数据,下载页面 %v 个(成功:%v,失败:%v),耗时:%.5f 分钟 ——", sum, cache.GetPageCount(0), cache.GetPageCount(1), cache.GetPageCount(-1), takeTime)
	log.Printf(" * ")
	log.Println(` *********************************************************************************************************************************** `)

	// 标记结束
	self.finish <- true
}