Ejemplo n.º 1
0
	site=SiteInfo.objects.get(id=id)																	#得到当前抓取的站点信息
	log=Log.objects.get(siteId=id)  																	#得到当前抓取站点的日志Log
	startUrl=site.startUrl  																				#得到抓取的起始页地址
	
	#--开始匹配和抓取--#
	try:
		topC=compiledTopPatterns.finditer(getHtml(startUrl)) 									#调用公共函数catchIter抓取所有一级分类,得到所有一级分类的迭代器
	except URLError,e:																				#如果出现URLError,将错误记录到日志,并返回错误信息和当前事件
		urlErrorHandler(log,e)																			#调用urlErrorHandler函数处理URLError
		log.currentEvent='Catch Category False'													#如果发生异常,则记录事件为'Catch Category False'
		log.save()																						#保存log数据
		return HttpResponse(log.errorInfo)															#返回log信息
	for top in topC:
		topLink=getGroup(top,'TopLink')															#调用getGroup函数,取出一级分类url,并对其转码
		topTitle=getGroup(top,'TopTitle')															#调用getGroup函数,取出一级分类标题,并对其转码
		tc=TopCategory(title=topTitle,url=topLink,siteId=id)										#将一级分类数据保存到TopCategory的模型中,siteId为当前抓取站点的id值
		tc.save()																						#保存一级分类到数据库
		subHtml=top.group()																			#得到当前一级分类的匹配信息(其中包括每个子分类的列表)
		subC=compiledSubPatterns.finditer(subHtml)												#对子分类进行匹配,得到当前一级分类下的所有子分类的一个迭代器
		for sub in subC:																				#对子分类迭代器进行循环
			subLink=getGroup(sub,'SubLink')														#取出子分类url,并对其转码
			subTitle=getGroup(sub,'SubTitle')														#取出子分类标题,并对其转码
			sc=SubCategory(title=subTitle,url=subLink,topcategory=tc,siteId=id)				#将子分类数据赋值给SubCategory模型
			sc.save()																					#保存子分类数据到数据库
			#--记录日志--#
			log.errorInfo='No Exception Raise'
			log.currentEvent='Save Category Success'
			log.save()
	return HttpResponse('抓取成功,请<a href="/bookcatch/addsites/">返回</a>')
	
def getPageUrl(firstUrl,num):
Ejemplo n.º 2
0
	log=Log.objects.get(siteId=id)                                   										#得到当前抓取站点的日志Log
	startUrl=site.startUrl                                                 										#得到抓取的起始页地址
	
	#--抓取分类--#
	try:
		topC=compiledTopPatterns.finditer(getHtml(startUrl))                   						#抓取所有一级分类,得到所有一级分类的迭代器
	except URLError,e:                                                               								#如果出现URLError,将错误记录到日志,并返回错误信息和当前事件
		urlErrorHandler(log,e)                                                       								#调用 urlErrorHandler函数处理异常
		log.currentEvent='Catch Category'
		log.save()
		return HttpResponse(log.errorInfo)
	for top in topC:                                                                     							#对上面的迭代器进行循环
		topLink=top.group('TopLink')                                             							#取出一级分类url
		topTitle=top.group('TopTitle')                                           							#取出一级分类标题
		if topTitle !='进口原版':                                                     							#由于卓越的所有分类的进口原版分类url地址错误,所以要把这个分类排除在外,用其他方法抓取
			tc=TopCategory(title=topTitle,url=topLink,siteId=id)       							#将一级分类数据保存到TopCategory的模型中(即:保存到数据库中),siteId为当前抓取站点的id值
			tc.save()
			subHtml=top.group()                                                   							#得到当前一级分类的匹配HTML代码(其中包括每个子分类的列表)
			subC=compiledSubPatterns.finditer(subHtml)                            						#对子分类进行匹配,得到当前一级分类下的所有子分类的一个迭代器
			i=0
			for sub in subC:                                                           							#对子分类迭代器进行循环
				i+=1
				subLink=sub.group('SubLink')                                   							#取出子分类url
				subTitle=sub.group('SubTitle')                                 							#取出子分类名称
				if i !=1:                                                                 							#由于这个迭代器的第一个是一级分类名称,所以应该排除在外
					sc=SubCategory(title=subTitle,url=subLink,topcategory=tc,siteId=id)		#将子分类数据保存到数据库中
					sc.save()
					#--保存成功,将事件记录到日志--#
					log.errorInfo='No Exception Raise'                       								#保存日志错误信息
					log.currentEvent='Save Category Success'           								#保存当前事件
					log.save()