print("Check process ERROR!!!") return False def readfile(tfile): with open(tfile, 'r') as f: lines = f.readlines() return lines[-50:] #a;lskdjf a;f dsf;ds f;f f # todo 所有的错误提示中加上那个可以确定错误位置的东西 if __name__ == "__main__": dbhelper = DB() tempNumber = len( dbhelper.__query__("select * from c_title")) # 先检测一下多少,变了多少 email = EMail() timeSleep = 60 * 60 * 6 #这个是发右键的休眠的时间 while (1): now_date = (date.today() + timedelta(days=-1)).strftime( "%Y-%m-%d") # 具体昨天日期的三个东西的结果 tengxunNumber = len( dbhelper.__query__( "select * from tengxun where newdate='%s' and fromwhere='%s'" % (now_date, "tengxun"))) # 先检测一下多少,变了多少 wangyiNumber = len( dbhelper.__query__( "select * from tengxun where newdate='%s' and fromwhere='%s'" % (now_date, "wangyi"))) fenghuangNumber = len( dbhelper.__query__(
def getEveryFenghuang(self): dbhelper = DB() dateurl = fenghuangDateUrls() oneContent = fenghuangPageContent() print("共提取到新闻url的数量有") now_date = (date.today() + timedelta(days=-1)).strftime("%Y-%m-%d") # 昨天日期 print(now_date) # print(dateurl.getOneDayNewUrl("2018-07-03")) #1.页面新闻url写入数据库 todayNewUrl = dateurl.getUrlLists(now_date) #1.这个就是当天的 urlNumer = len(todayNewUrl) todayNewUrl = dbhelper.__query__("select url from tengxun where urlState='False' and fromWhere='fenghuang'") #只要数据库中未填补内容的url print(type(todayNewUrl)) print(len(todayNewUrl)) # for dic in todayNewUrl: # dic['url'] print("") # 这儿才是把东西提取出来 count = 1 #计数,每100个就休息1分钟 print(todayNewUrl) flagNumber = 1 mixNumber = 0 for dic in todayNewUrl: newUrl = dic['url'] #2.把写入数据库的这几个新闻url的内容提取出来 if newUrl.find("pl.ifeng.com")!=-1: title, Hcontent, Tcontent, Acontent = oneContent.getPlContent(newUrl) if (title != "凤凰没有找到标题" and title != None and Hcontent != ""): # 有内容的时候就更新这条数据 dbhelper.updateContent(newUrl, title, Hcontent, Tcontent, Acontent) print("正在生成新混合新闻。。。") # 3. 然后是把页面页写入数据库,再然后是随机生成相同数量的 mixNews = MixNews() if mixNews.__startToMix__() != True: # 调用一次就执行一次,可以修改返回的状态 print("生成失败,已经没有刚填满的未用过的文章了") print(newUrl) dbhelper.deleteUrl(newUrl) # 如何这个内容为空也要删除,(可能前面一个步骤更新的时候发现相同的标题,所以插入不了), else: mixNumber+=1 #成功就生成一个累加 else: print("更新失败,标题提取失败,为空") dbhelper.deleteUrl(newUrl) # 按url把这条记录删除掉咯 else: #这个就是默认的那个新闻news.ifeng.com title, Hcontent, Tcontent, Acontent =oneContent.getNewsContent(newUrl) if (title != "凤凰没有找到标题" and title != None and Hcontent != ""): # 有内容的时候就更新这条数据 dbhelper.updateContent(newUrl, title, Hcontent, Tcontent, Acontent) print("正在生成新混合新闻。。。") # 3. 然后是把页面页写入数据库,再然后是随机生成相同数量的 mixNews = MixNews() if mixNews.__startToMix__() != True: # 调用一次就执行一次,可以修改返回的状态 print("生成失败,已经没有刚填满的未用过的文章了") print(newUrl) dbhelper.deleteUrl(newUrl) # 如何这个内容为空也要删除,(可能前面一个步骤更新的时候发现相同的标题,所以插入不了), else: mixNumber+=1 #成功就生成一个累加 else: print("更新失败,标题提取失败,为空") dbhelper.deleteUrl(newUrl) # 按url把这条记录删除掉咯 print("目前生成了 共有那么多个混合的新闻 "+str(mixNumber)) #普遍存在
def getEveryTengxun(self): dbhelper = DB() #处理数据库用 pcontent = pageContent() #处理页面详情用 now_date = (date.today() + timedelta(days=-1)).strftime( "%Y-%m-%d") # 昨天日期 print("昨天的日期是" + now_date + "现在正在爬取昨天的新闻!d😀") #应该是获得昨天才对 #------------------------------------------------爬取昨晚的----------------------------------------------------- print("开始执行写入所有的url") dateUrl = DateUrl( ) # 2018-09-27 日编辑 todo 这儿区分开来,不用通过这儿返回的,另外那儿只需要把那些urlState="False"的提取出来就可以 dateUrl.pageUrlMain(now_date) #获得今天的,并且写入数据库 ,所以这儿返回什么都没关系,不需要返回都可以的 #-------------------------------------------------打开内容------------------------------------------------------ print("开始执行读取页面") todayNewUrl = dbhelper.__query__( "select url from tengxun where urlState='False' and fromWhere='tengxun'" ) print("读取出 " + str(len(todayNewUrl)) + " 条") print("") #每100个就休息1分钟,慢是有原因的#每两百个休息2分钟好了 count = 1 delCount = 0 for dic in todayNewUrl: url = dic['url'] if count % 200 == 0: time.sleep(60 * 2) print("休息2分钟") count += 1 # 爬取的当前时间写入进去。 title, Hcontent, Tcontent, Acontent = pcontent.getPageContentMain( url, now_date) #这儿漏了更新到url中去 ,自动转换成xw的然后再下载 time.sleep(1) if (title != "腾讯没找到标题" and title != None and Hcontent != ""): #有内容的时候就更新这条数据 # todo 这儿加上生成云图保存本地,并且把路径合并成src生成字符串合并到Acontent就可以了。 # 生成img标签 News_Id = url.replace("$", "").replace("/", "").replace( ":", "_").replace(".", "_") imgTag = "<img src=" + Gen_WordCloud( Newsid=News_Id, text=Acontent) + " />" #不能使用单引号,否则会让sql语句中断开的 print(imgTag) Acontent = imgTag + Acontent print("更新的结果有") print(title) print(Tcontent) print(url) print(Acontent) print("显示完毕") resultState = dbhelper.updateContent(url, title, Hcontent, Tcontent, Acontent) #要删除的是更新失败的那个 if resultState == False: #更新成功 print("更新失败,正在删除这个url不同,但是标题相同的新闻") print(url) dbhelper.deleteUrl(url) #删除提取失败的那些 print() else: pass #更新成功什么都不干 else: delCount += 1 print("打开页面提取失败,可能是页面为404腾讯,删除这条url") #为空的话,那么就删除这条把 dbhelper.deleteUrl(url) #按url把这条记录删除掉咯 dbhelper.classifyDB() # 执行完了后就进行分类到django的数据库 comment = CommentCrawl() comment = CommentCrawl() comment.getCommentMain() #执行了爬取评论并且分类到django数据库 print("共删除了 " + str(delCount)) print("原来有 " + str(len(todayNewUrl)) + " 条") print("今天爬取完毕,蟹蟹使用")
#这个是用来分类整理进入django的数据库的。 # newssentimentanalysis_homenews 这个是示范的名字,分发到不同的表里面就可以了 from DBcontrol import DB chak = DB() # chak.getAllTitle() # chak.saveDicToMysql(testDic,"2019-03-18","tengxun") # chak.insertTengxunTheme("www", "2018-232", "test", "auto") # todo 爬完再执行去重。 resultDic = chak.__query__( "select url,title,urlState,Hcontent,Mcontent,Tcontent,Acontent,newdate,fromWhere from tengxun where urlState='True'" ) print(resultDic) print(len(resultDic)) #这次我并没有更新他们,更新他们之前是在everyday那儿进行处理的,把信息和urlstarte一起更新进去 print("开始分类整理") for rowDic in resultDic: print(rowDic) #七个分类 newssentimentanalysis_caranalysis_comment sql = "" sqlHead = "insert into newssentimentanalysis_" #插入分类新闻主表的sql sqlTail = "news (url,Title,UrlState,Hcontent,Mcontent,Tcontent,Acontent,Date,fromWhere)values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" sql2 = "" # sql2Head ="insert into newssentimentanalysis_" #插入新闻正文评分表的sql sql2Tail = "analysis_news(Pos_Score,Neg_score,Sentiment,News_id_id)values (%s,%s,%s,%s)" #这个是sql的 if rowDic['url'].find( 'auto' ) != -1: #找到这个就是汽车,中间是表名 newssentimentanalysis_entertainmentanalysis_news sql = sqlHead + "car" + sqlTail sql2 = sqlHead + "car" + sql2Tail pass if rowDic['url'].find('tech') != -1: #找到这个就是科技
print("Check process ERROR!!!") return False def readfile(tfile): with open(tfile, 'r') as f: lines = f.readlines() return lines[-20:] #a;lskdjf a;f dsf;ds f;f f if __name__ == "__main__": dbhelper = DB() tempNumber = len( dbhelper.__query__("select * from c_title")) # 先检测一下多少,变了多少 email = EMail() while (1): if isRunning("python everydaynews.py"): print("程序还在运行中。。。12小时后继续检查") nonNumber = len( dbhelper.__query__("select * from c_title")) # 先检测一下多少,变了多少 print(str(nonNumber - tempNumber)) face = "🤔我该以什么表情来表示呢,如果不是崩了,那就待机中,6小时后我再来看看" if (nonNumber - tempNumber) > 800: face = "\n🤣今天的量还不错😘" elif ((nonNumber - tempNumber)) > 600 and ( (nonNumber - tempNumber)) <= 800: face = "🤗今天的量还算正常哈" else: pass
state = mixNews.__startToMix__() if (state): # 里面已经有那种写入数据库的操作了 datehelper.updateState(url[0]) if __name__ == "__main__": #这个就是url的东西 fillTengxun = pageContent() fillFenghaung = fenghuangPageContent() fillWangyi = wangyiPageContent() datehelper = DB() # tengxunUrls = datehelper.__query__('select url from tengxun where fromWhere ="tengxun" and url!="" and isNull(title) and urlState="False";') # fenghuangUrls = datehelper.__query__('select url from tengxun where fromWhere ="fenghuang" and url!="" and isNull(title) and urlState="False" ;') wangyiUrls = datehelper.__query__( 'select url from tengxun where fromWhere ="wangyi" and url!="" and isNull(title) and urlState="False" ;' ) # print(len(tengxunUrls)) # print(len((fenghuangUrls))) print(len((wangyiUrls))) # tengxun = myThread(tengxunFill,tengxunUrls,"tengxun") # tengxun.run() # wangyi = myThread(wangyiFill, wangyiUrls, "wangyi") wangyi.run() # fenghuang = myThread(fenghuangFill,fenghuangUrls,"fenghuang") # fenghuang.run()
def getEveryTengxun(self): #这个其实就是封装在对象里面的一个主函数而已 #开始之前,先检查有没有序列化的文件在这儿 dbhelper = DB() # todo 提取页面失败得这几个可以研究一下 是tuple 网址不同,(网址不同,发布时间的不同,) # {'type': 2, 'value': 'http:\\/\\/inews.gtimg.com\\/newsapp_match\\/0\\/5261922136\\/0'} # 纪念品牌20周年 smart Forease官图发布 # 打开页面提取失败,可能是页面为404腾讯,删除这条url # 删除成功哈 http:////auto.qq.com//a//20181005//001598.htm # http:////news.qq.com//a//20181005//002590.htm # qqnews # 2 pcontent = pageContent() # print("共提取到新闻url的数量有") # now_date = time.strftime('%Y-%m-%d', time.localtime(time.time())) # 获取当前日期,每次执行操作的时候都这样 now_date = (date.today() + timedelta(days=-1)).strftime( "%Y-%m-%d") # 昨天日期 # time.localtime(time.time()) #暂时是这样,以后的话 print("昨天的日期是" + now_date + "现在正在爬取昨天的新闻!d😀") #1.获取一天的新url #爬取昨晚的 dateUrl = DateUrl( ) # 2018-09-27 日编辑 todo 这儿区分开来,不用通过这儿返回的,另外那儿只需要把那些urlState="False"的提取出来就可以 dateUrl.pageUrlMain(now_date) #获得今天的,并且写入数据库 todo 待会要把这儿的这个调回去 todayNewUrl = dbhelper.__query__( "select url from tengxun where urlState='False' and fromWhere='tengxun'" ) #只要数据库中取出需要读取的url # print(type(todayNewUrl)) print(len(todayNewUrl)) print("") # 这儿才是把东西提取出来 count = 1 #计数,每100个就休息1分钟 for dic in todayNewUrl: #这儿还是需要把 url = dic['url'] #2.把写入数据库的这几个新闻url的内容提取出来 if count % 200 == 0: #突然的中断应该是因为这边连接不上那儿,所以应该问题不大 time.sleep(60 * 2) #每两百个休息4分钟好了 count += 1 #这儿的url是未转换成xw。电脑原版页面的url,所以,存的是这种url #还是得把这个url打开,才知道是否是title已经存在的 title, Hcontent, Tcontent, Acontent = pcontent.getPageContentMain( url) #这儿漏了更新到url中去 ,自动转换成xw的然后再下载 time.sleep(1) # print(title, Hcontent, Tcontent, Acontent) if (title != "腾讯没找到标题" and title != None and Hcontent != ""): #有内容的时候就更新这条数据 # print("要更新的url是 "+url) resultState = dbhelper.updateContent(url, title, Hcontent, Tcontent, Acontent) #要删除的是更新失败的那个 if resultState == False: #更新成功 print("更新失败,正在删除这个url不同,但是标题相同的新闻") print(url) dbhelper.deleteUrl(url) # 按url把这条记录删除掉咯,生成失败也不需要删除这个拉, print() else: # print("正在生成新混合新闻。。。") # 3. 然后是把页面页写入数据库,再然后是随机生成相同数量的 mixNews = MixNews() if mixNews.__startToMix__() != True: # 调用一次就执行一次,可以修改返回的状态 print("生成失败,已经没有刚填满的未用过的文章了") print(url) dbhelper.deleteUrl( url) # 如何这个内容为空也要删除,(可能前面一个步骤更新的时候发现相同的标题,所以插入不了), # print() else: print("打开页面提取失败,可能是页面为404腾讯,删除这条url") #为空的话,那么就删除这条把 dbhelper.deleteUrl(url) #按url把这条记录删除掉咯
def getEveryDayWangyi(self): dbhelper = DB() dateurl = DateUrl() oneContent = wangyiPageContent() print("共提取到新闻url的数量有") now_date = (date.today() + timedelta(days=-1)).strftime( "%Y-%m-%d") # 昨天日期 print(now_date) # print(dateurl.getOneDayNewUrl("2018-07-03")) #1.页面新闻url写入数据库 dateurl.getRollUrlList( now_date) # 1.这个就是当天的,和凤凰一样,老样子啊,获得了链接后直接可以写入数据库中去了 todayNewUrl = dbhelper.__query__( "select url from tengxun where urlState='False' and fromWhere='wangyi';" ) # 只要数据库中取出需要读取的url # print(type(todayNewUrl)) print(len(todayNewUrl)) #这个才是打开来的东西 urlNumer = len(todayNewUrl) print("正在打开网易的新闻的东西") print(todayNewUrl) # print("正在打开网易的新闻的东西") # print(todayNewUrl) # for newUrl in todayNewUrl: # 2.然后把内容段落写入数据库 # title, Hcontent, Tcontent, Acontent = oneContent.getPageContent(newUrl) # if (title != "网易没找到标题" and title != None and Hcontent != ""): # 有内容的时候就更新这条数据 # dbhelper.updateContent(newUrl, title, Hcontent, Tcontent, Acontent) # # print("正在生成新混合新闻。。。") # 3. 然后是把页面页写入数据库,再然后是随机生成相同数量的 # mixNews = MixNews() # mixNews.__startToMix__() # 调用一次就执行一次,可以修改返回的状态 # # else: # print("更新失败,标题提取失败,为空") count = 1 #计数,每100个就休息1分钟 for dic in todayNewUrl: url = dic['url'] #2.把写入数据库的这几个新闻url的内容提取出来 if count % 200 == 0: #突然的中断应该是因为这边连接不上那儿,所以应该问题不大,每两百条休息一分钟 time.sleep(60) count += 1 #这儿的url是未转换成xw。电脑原版页面的url,所以,存的是这种url title, Hcontent, Tcontent, Acontent = oneContent.getNewsContent( url) #这儿漏了更新到url中去 ,自动转换成xw的然后再下载 time.sleep(1) # print(title, Hcontent, Tcontent, Acontent) if (title != "腾讯没找到标题" and title != None and Hcontent != ""): #有内容的时候就更新这条数据 # print("要更新的url是 "+url) resultState = dbhelper.updateContent(url, title, Hcontent, Tcontent, Acontent) #要删除的是更新失败的那个 if resultState == False: #更新成功 print("更新失败,正在删除这个重复的url") print(url) # dbhelper.deleteUrl(url) # 按url把这条记录删除掉咯,生成失败也不需要删除这个拉, print() else: # print("正在生成新混合新闻。。。") # 3. 然后是把页面页写入数据库,再然后是随机生成相同数量的 mixNews = MixNews() if mixNews.__startToMix__() != True: # 调用一次就执行一次,可以修改返回的状态 print("生成失败,已经没有刚填满的未用过的文章了") print(url) dbhelper.deleteUrl( url) # 如何这个内容为空也要删除,(可能前面一个步骤更新的时候发现相同的标题,所以插入不了), # print() else: print(True) else: print("打开页面提取失败,可能是页面为404网易,正在删除这条url " + url) #为空的话,那么就删除这条把 dbhelper.deleteUrl( url) #按url把这条记录删除掉咯 todo don't delete it first
class CommentCrawl(object): def __init__(self): self.dbHelper = DB() def changTimeToDate(self,dateString): timeStamp = dateString timeArray = time.localtime(timeStamp) print(timeArray) otherStyleTime = time.strftime("%Y-%m-%d", timeArray) # print(otherStyleTime) return otherStyleTime def getNewsIdAndUrl(self): #提取出新闻的id和url # dbHelper = DB() themeWord = ['car','technology','home','entertainment','house','finance','sports'] #类别新闻 resultDic = {} sqlHead = "select News_id,url from newssentimentanalysis_" sqlTail = "news" # 插入 for theme in themeWord: print(sqlHead+theme+sqlTail) resultDic[theme] = self.dbHelper.__query__(sqlHead+theme+sqlTail)# 返回 return resultDic #返回格式{'car':[{'id':xx,'url':xx},.....,'home'...] def getAwriteCommentJson(self,id,url): #这个是评论专用的请求返回成字典的。 time.sleep(1) cooker = makeBS() commentRawUrl = "http://coral.qq.com/article/" cmt_id = cooker.getCmt_id(url) #去掉空格 if cmt_id==None: return if cmt_id.find("'")!=-1: cmt_id = cmt_id.replace("'","") else : cmt_id = cmt_id.strip() # print( cmt_id.strip() ) #这个用来拼接用到。 try: allUrl = commentRawUrl + str(cmt_id) + "/comment/#" print(allUrl) responseDic = cooker.makeBSjson(allUrl) # if # print() print(responseDic) commentList = responseDic['data']['commentid'] print(commentList) from pprint import pprint for comment in commentList: pprint(type(comment['id'])) print(comment['id']) comment['content'] = emoji.demojize(comment['content']) #过滤emoji comment['userinfo']['nick'] = emoji.demojize(comment['userinfo']['nick']) comment['time']=self.changTimeToDate(comment['time']) #时间戳改成日期字符串 print("新闻id "+ str(id)) print("新闻的url是 "+ url) self.dbHelper.classifyDBComment(url=url,id=id,comment=comment) #插入数据库。 print("") #-----------------------这儿可以合成sql语句的话就可以执行插入的操作了。----------------------- # 通过url来合成插入的sql语句,DBcontrol的方法中来做这些东西 except Exception as e: print("提取此条评论出错,正在跳过") print(e) def getCommentMain(self): resultDic = self.getNewsIdAndUrl() print(resultDic) from pprint import pprint resultList = [] count = 0 for theme in resultDic: print("现在是",theme) for oneNews in resultDic[theme]: count+=1 #这个累加,然后如果是到了一定的数量那就休眠一下 if count%100==0: #每100条 time.sleep(60*2) #休息两分钟。 print(oneNews) #已经提取出来了 self.getAwriteCommentJson(id=oneNews['News_id'],url=oneNews['url']) #逐条插入,进行,这个不需要返回 # resultList.append(oneNews) # 添加进入 print("finish comments crawl!")