實時疫情的新聞爬取及熱詞雲展示


首先是爬取:

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做熱詞雲展示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM