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):
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()