zoukankan      html  css  js  c++  java
  • 实时疫情的新闻爬取及热词云展示

    首先是爬取:

    import sys
    import requests
    import json
    import pymysql
    class yq():
        def __init__(self):
            self.load_url = "https://opendata.baidu.com/data/inner?tn=reserved_all_res_tn&dspName=iphone&from_sf=1&dsp=iphone&resource_id=28565&alr=1&query={}&cb=jsonp_1586658326556_20322"
            self.headers = {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"
            }
            self.tj = []
    
        # 1.发生请求
        def send_request(self, url):
            data = requests.get(url, headers=self.headers).content.decode("utf-8")
            return data
    
        # 2.解析数据
        def parse_jsondata(self, data,gj):
            i = data.find("(")+1
            data = data[i:-1]
    
            data = json.loads(data)
            if gj=='赞比亚共和国' or gj=='泽西岛' or gj=='根西岛' or gj=='也门共和国' or gj=='瓜德罗普岛' or gj=='蒙古' or gj=='荷属圣马丁' or gj=='布隆迪共和国' or gj=='格林那达' or gj=='北马里亚纳群岛联邦' or gj=='库拉索岛' or gj=='圣其茨和尼维斯' or gj=='福克兰群岛' or gj=='荷兰加勒比地区' or gj=='圣皮埃尔和密克隆群岛':
             print("iii")
            else:
                if data:
                    # 存在值即为真
                    qq = data["Result"][0]["DisplayData"]["result"]["items"]
                    for i in qq:
                        a = {}
                        a["eventDescription"] = i["eventDescription"]
                        a["eventUrl"] = i["eventUrl"]
                        a["siteName"] = i["siteName"]
                        self.tj.append(a)
                else:
                    # list_temp是空的
                    print("该国家为空!")
    
    
    
        # 3.显示数据
        def show_data(self,gj,cj):
            a = 1
            conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='wangye')
            cur = conn.cursor()
            for i in self.tj:
                print(f'{a}.{i["eventDescription"]}     信息来源:{i["siteName"]}       链接:{i["eventUrl"]}     ')
                a=a+1
                title1 = f'{i["eventDescription"]}'
                link1 = f'{i["eventUrl"]}'
                source1 = f'{i["siteName"]}'
                if gj=='中国':
                   cur.execute("insert into news(continents,provincename,title, link, source) values ('%s','%s','%s','%s','%s')"%(cj,gj,title1,link1,source1))
            conn.commit()
            cur.close()
            conn.close()
            # while True:
            #     print("*" * 125)
            #     try:
            #         list = int(input(f'请输入你要具体查看的新闻(如需重新查询国家,请输入0;如需保存所有数据,请输入{a};如需退出程序,请输入{a+1}):'))
            #         if (list == 0):
            #             self.run()
            #             break
            #         elif (list == a):
            #             print("保存文件格式为json文件,保存方法后续开发。。。")
            #             self.save_data()
            #         else:
            #             print(f'你要查看的新闻是:{self.tj[list - 1]["eventDescription"]}')
            #             print(f'信息来源:{self.tj[list - 1]["siteName"]}')
            #             print(f'具体内容:{self.tj[list - 1]["eventUrl"]}')
            #     except:
            #         if(list==a+1):
            #             print("*" * 125)
            #             print("程序结束,欢迎您再次使用!!!")
            #             print("如程序错误或与作者提出意见沟通交流,请加QQ:923534165,本人菜鸡,欢迎大家批判!!!")
            #             sys.exit()
            #         print("*" * 125)
            #         print("请输入正确字符")
    
        # 4.保存数据
        def save_data(self):
            json.dump(self.tj, open(f'{self.GJ}.json', "w"))
    
    
        # 5.启动
        def run(self):
            print("*" * 125)
            self.tj = []
            conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='vdata')
            cur = conn.cursor()
            cur.execute('select * from contury where date = "2020-05-26 00:00:00"')
            for users in cur.fetchall():
                print('continents:', users[0], 'provincename:', users[1])
    
                #gj = input("请输入你要查看最新新闻的疫情国家:")
                gj =users[1]
                cj =users[0]
                self.GJ = gj+"新型肺炎最新动态"
                # 构造url
                url = self.load_url.format(self.GJ)
                # 发生请求
                data = self.send_request(url)
                # 解析数据
                self.parse_jsondata(data,gj)
                # 显示数据
                self.show_data(gj,cj)
            cur.close()
            conn.close()
            print("*"*125)
    
    print("*"*125)
    print("*"+" "*50+"欢迎使用疫情新闻查询系统"+" "*50+"*")
    
    yq().run()

    这里用的是pycharm连接本地的mysql数据库

    若这里连接的时候遇到时区错误:

    进入命令窗口(Win + R),连接数据库 mysql -hlocalhost -uroot -p,回车,输入密码,回车,如图:

     

     继续输入 show variables like'%time_zone';

     显示 SYSTEM 就是没有设置时区啦。

    输入set global time_zone = '+8:00';   注意不要漏掉后面的分号),回车,如图:

    然后使用网上的处理中文分词网站

    https://wordart.com/create

    下载下来

     

     最后导入数据库中。

    然后使用E-chart做热词云展示

  • 相关阅读:
    轻量级数据库sqlite的使用
    Integer引发的思考
    css限制显示行数
    数据库 chapter 17 数据仓库与联机分析处理技术
    数据库 chapter 15 对象关系数据库系统
    数据库 chapter 16 XML数据库
    数据库 chapter 14 分布式数据库系统
    数据库 chapter 11 并发控制
    数据库 chapter 12 数据库管理系统
    数据库 chapter 13 数据库技术新发展
  • 原文地址:https://www.cnblogs.com/a155-/p/14082914.html
Copyright © 2011-2022 走看看