Ejemplo n.º 1
0
        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__(
Ejemplo n.º 2
0
    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))   #普遍存在
Ejemplo n.º 3
0
    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("今天爬取完毕,蟹蟹使用")
Ejemplo n.º 4
0
#这个是用来分类整理进入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:  #找到这个就是科技
Ejemplo n.º 5
0
        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
Ejemplo n.º 6
0
            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()
Ejemplo n.º 7
0
    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把这条记录删除掉咯
Ejemplo n.º 8
0
    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
Ejemplo n.º 9
0
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!")