def add_sub_category(): data = request.json education_id = data.get('education_id', None) if ((data.get('name', '') == '') or (data.get('education_id', '') == '')): abort(422) try: sub_category = SubCategory(name=data.get('name')) sub_category.education_id = data.get('education_id') sub_category.rank = data.get('rank') sub_category.insert() except Exception: abort(422) return jsonify({'message': 'success', 'id': sub_category.id})
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): """公共函数--得到分页地址,分页地址示例:http://list.book.dangdang.com/01.01.01_P44.htm""" page='_P'+str(num)+'.htm' url=firstUrl.replace('.htm',page) return url def singleBookSave(subcategory,log,b,itemId): """***单本书函数:单本书籍的抓取、匹配、最后保存到数据库***"""
def createSubCategory(number, text, cat): subCat = SubCategory(CategoryID = number, CategoryDescription=text, Parent=cat) subCat.save() return subCat
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() #--抓取“进口原版”分类,由于卓越的所有分类的进口原版分类url地址错误,所以要从其他页面抓取--# #进口原版的分类地址# IOUrl='http://www.amazon.cn/s/qid=1261309185/ref=sr_nr_n_49?ie=UTF8&rs=658391051&bbn=658391051&rnid=658391051&rh=n%3A658390051%2Cn%3A!658391051%2Cn%3A2045366051' try: IOData=compiledIOPatterns.finditer(getHtml(IOUrl)) #抓取进口原版分类下的子分类,得到一个子分类的迭代器 except URLError,e: urlErrorHandler(log,e) #调用 urlErrorHandler函数处理异常