首先是爬取:
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做熱詞雲展示