Python制作疫情地圖--第一彈 獲取數(shù)據(jù)

Python制作疫情地圖

詳細講解視頻地址——詳細視頻講解

第一彈 獲取數(shù)據(jù)(寫入excel)

以下代碼是繪制地圖時調用的類,已封裝。

導入需要的模塊

若未安裝,win+R進入命令行窗口,輸入:pip install module(模塊名)

import requests
from lxml import etree
import json
import re
import openpyxl

創(chuàng)建一個類

class Get_data():

獲取數(shù)據(jù)

    def get_data(self):
        # 目標url
        url = "https://voice.baidu.com/act/newpneumonia/newpneumonia/"

        # 偽裝請求頭
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/80.0.3987.149 Safari/537.36 '
        }

        # 發(fā)出get請求
        response = requests.get(url,headers=headers)

        # 將請求的結果寫入文件,便于分析
        with open('html.txt', 'w') as file:
            file.write(response.text)

    def get_time(self):
        with open('html.txt','r') as file:
            text = file.read()
        # 獲取更新時間
        time_in = re.findall('"mapLastUpdatedTime":"(.*?)"',text)[0]
        time_out = re.findall('"foreignLastUpdatedTime":"(.*?)"',text)[0]
        print('郭內毅擎更新時間為 '+time_in)
        print('郭外毅擎更新時間為 '+time_out)
        return time_in,time_out

解析數(shù)據(jù)

    def parse_data(self):
        with open('html.txt','r') as file:
            text = file.read()
        # 生成HTML對象
        html = etree.HTML(text)
        # 解析數(shù)據(jù)
        result = html.xpath('//script[@type="application/json"]/text()')
        # print(type(result))
        result = result[0]
        # print(type(result))
        result = json.loads(result)
        # print(type(result))
        result = json.dumps(result['component'][0]['caseList'])
        # print(result)
        # print(type(result))
        with open('data.json','w') as file:
            file.write(result)
            print('數(shù)據(jù)已寫入json文件...')

        response = requests.get("https://voice.baidu.com/act/newpneumonia/newpneumonia/")
        # 將請求的結果寫入文件,便于分析
        with open('html.txt', 'w') as file:
            file.write(response.text)

        # 獲取時間
        time_in = re.findall('"mapLastUpdatedTime":"(.*?)"', response.text)[0]
        time_out = re.findall('"foreignLastUpdatedTime":"(.*?)"', response.text)[0]
        print(time_in)
        print(time_out)

        # 生成HTML對象
        html = etree.HTML(response.text)
        # 解析數(shù)據(jù)
        result = html.xpath('//script[@type="application/json"]/text()')
        print(type(result))
        result = result[0]
        print(type(result))
        result = json.loads(result)
        print(type(result))
        # 以每個省的數(shù)據(jù)為一個字典
        data_in = result['component'][0]['caseList']
        for each in data_in:
            print(each)
            print("\n" + '*' * 20)

        data_out = result['component'][0]['globalList']
        for each in data_out:
            print(each)
            print("\n" + '*' * 20)

        '''
        area --> 大多為省份
        city --> 城市
        confirmed --> 累計
        crued --> 值域
        relativeTime --> 
        confirmedRelative --> 累計的增量
        curedRelative --> 值域的增量
        curConfirm --> 現(xiàn)有確鎮(zhèn)
        curConfirmRelative --> 現(xiàn)有確鎮(zhèn)的增量

        '''

        # 規(guī)律----遍歷列表的每一項,可以發(fā)現(xiàn),每一項(type:字典)均代表一個省份等區(qū)域,這個字典的前11項是該省份的毅擎數(shù)據(jù),
        # 當key = 'subList'時,其結果為只有一項的列表,提取出列表的第一項,得到一系列的字典,字典中包含該城市的毅擎數(shù)據(jù).

將數(shù)據(jù)寫入excel文件

        # 將得到的數(shù)據(jù)寫入excel文件
        # 創(chuàng)建一個工作簿
        wb = openpyxl.Workbook()
        # 創(chuàng)建工作表,每一個工作表代表一個area
        ws_in = wb.active
        ws_in.title = "國內毅擎"
        ws_in.append(['省份', '累計確診', '絲網(wǎng)', '治愈', '現(xiàn)有確診', '累計確診增量', '絲網(wǎng)增量', '治愈增量', '現(xiàn)有確診增量'])
        for each in data_in:
            temp_list = [each['area'], each['confirmed'], each['died'], each['crued'], each['curConfirm'],
                         each['confirmedRelative'], each['diedRelative'], each['curedRelative'],
                         each['curConfirmRelative']]
            for i in range(len(temp_list)):
                if temp_list[i] == '':
                    temp_list[i] = '0'
            ws_in.append(temp_list)

        # 獲取國外毅擎數(shù)據(jù)
        for each in data_out:
            print(each)
            print("\n" + '*' * 20)
            sheet_title = each['area']
            # 創(chuàng)建一個新的工作表
            ws_out = wb.create_sheet(sheet_title)
            ws_out.append(['郭家', '累計確診', '絲網(wǎng)', '治愈', '現(xiàn)有確診', '累計確診增量'])
            for country in each['subList']:
                list_temp = [country['country'], country['confirmed'], country['died'], country['crued'],
                             country['curConfirm'], country['confirmedRelative']]
                for i in range(len(list_temp)):
                    if list_temp[i] == '':
                        list_temp[i] = '0'
                ws_out.append(list_temp)

            # 保存excel文件
            wb.save('./data.xlsx')

生成excel文件(效果展示)

國內疫情數(shù)據(jù)
國外疫情數(shù)據(jù)
國外疫情數(shù)據(jù)

最后附上完整代碼

import requests
from lxml import etree
import json
import re
import openpyxl


class Get_data():
    def get_data(self):
        # 目標url
        url = "https://voice.baidu.com/act/newpneumonia/newpneumonia/"

        # 偽裝請求頭
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/80.0.3987.149 Safari/537.36 '
        }

        # 發(fā)出get請求
        response = requests.get(url,headers=headers)

        # 將請求的結果寫入文件,便于分析
        with open('html.txt', 'w') as file:
            file.write(response.text)

    def get_time(self):
        with open('html.txt','r') as file:
            text = file.read()
        # 獲取更新時間
        time_in = re.findall('"mapLastUpdatedTime":"(.*?)"',text)[0]
        time_out = re.findall('"foreignLastUpdatedTime":"(.*?)"',text)[0]
        print('國內疫情更新時間為 '+time_in)
        print('國外疫情更新時間為 '+time_out)
        return time_in,time_out

    def parse_data(self):
        with open('html.txt','r') as file:
            text = file.read()
        # 生成HTML對象
        html = etree.HTML(text)
        # 解析數(shù)據(jù)
        result = html.xpath('//script[@type="application/json"]/text()')
        # print(type(result))
        result = result[0]
        # print(type(result))
        result = json.loads(result)
        # print(type(result))
        result = json.dumps(result['component'][0]['caseList'])
        # print(result)
        # print(type(result))
        with open('data.json','w') as file:
            file.write(result)
            print('數(shù)據(jù)已寫入json文件...')

        response = requests.get("https://voice.baidu.com/act/newpneumonia/newpneumonia/")
        # 將請求的結果寫入文件,便于分析
        with open('html.txt', 'w') as file:
            file.write(response.text)

        # 獲取時間
        time_in = re.findall('"mapLastUpdatedTime":"(.*?)"', response.text)[0]
        time_out = re.findall('"foreignLastUpdatedTime":"(.*?)"', response.text)[0]
        print(time_in)
        print(time_out)

        # 生成HTML對象
        html = etree.HTML(response.text)
        # 解析數(shù)據(jù)
        result = html.xpath('//script[@type="application/json"]/text()')
        print(type(result))
        result = result[0]
        print(type(result))
        result = json.loads(result)
        print(type(result))
        # 以每個省的數(shù)據(jù)為一個字典
        data_in = result['component'][0]['caseList']
        for each in data_in:
            print(each)
            print("\n" + '*' * 20)

        data_out = result['component'][0]['globalList']
        for each in data_out:
            print(each)
            print("\n" + '*' * 20)

        '''
        area --> 大多為省份
        city --> 城市
        confirmed --> 累計
        died --> 死亡
        crued --> 治愈
        relativeTime --> 
        confirmedRelative --> 累計的增量
        curedRelative --> 治愈的增量
        curConfirm --> 現(xiàn)有確診
        curConfirmRelative --> 現(xiàn)有確診的增量
        diedRelative --> 死亡的增量
        '''

        # 規(guī)律----遍歷列表的每一項,可以發(fā)現(xiàn),每一項(type:字典)均代表一個省份等區(qū)域,這個字典的前11項是該省份的疫情數(shù)據(jù),
        # 當key = 'subList'時,其結果為只有一項的列表,提取出列表的第一項,得到一系列的字典,字典中包含該城市的疫情數(shù)據(jù).

        # 將得到的數(shù)據(jù)寫入excel文件
        # 創(chuàng)建一個工作簿
        wb = openpyxl.Workbook()
        # 創(chuàng)建工作表,每一個工作表代表一個area
        ws_in = wb.active
        ws_in.title = "國內疫情"
        ws_in.append(['省份', '累計確診', '死亡', '治愈', '現(xiàn)有確診', '累計確診增量', '死亡增量', '治愈增量', '現(xiàn)有確診增量'])
        for each in data_in:
            temp_list = [each['area'], each['confirmed'], each['died'], each['crued'], each['curConfirm'],
                         each['confirmedRelative'], each['diedRelative'], each['curedRelative'],
                         each['curConfirmRelative']]
            for i in range(len(temp_list)):
                if temp_list[i] == '':
                    temp_list[i] = '0'
            ws_in.append(temp_list)

        # 獲取國外疫情數(shù)據(jù)
        for each in data_out:
            print(each)
            print("\n" + '*' * 20)
            sheet_title = each['area']
            # 創(chuàng)建一個新的工作表
            ws_out = wb.create_sheet(sheet_title)
            ws_out.append(['國家', '累計確診', '死亡', '治愈', '現(xiàn)有確診', '累計確診增量'])
            for country in each['subList']:
                list_temp = [country['country'], country['confirmed'], country['died'], country['crued'],
                             country['curConfirm'], country['confirmedRelative']]
                for i in range(len(list_temp)):
                    if list_temp[i] == '':
                        list_temp[i] = '0'
                ws_out.append(list_temp)

            # 保存excel文件
            wb.save('./data.xlsx')

求點贊求關注(?ω?)qwqqqqq

詳細講解視頻地址——詳細視頻講解

期待第二彈(繪制詞云圖)噢喂急!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笛求,隨后出現(xiàn)的幾起案子廊移,更是在濱河造成了極大的恐慌,老刑警劉巖探入,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狡孔,死亡現(xiàn)場離奇詭異,居然都是意外死亡蜂嗽,警方通過查閱死者的電腦和手機苗膝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來植旧,“玉大人辱揭,你說我怎么就攤上這事离唐。” “怎么了问窃?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵亥鬓,是天一觀的道長。 經(jīng)常有香客問我域庇,道長嵌戈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任听皿,我火速辦了婚禮咕别,結果婚禮上,老公的妹妹穿的比我還像新娘写穴。我一直安慰自己,他們只是感情好雌贱,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布啊送。 她就那樣靜靜地躺著,像睡著了一般欣孤。 火紅的嫁衣襯著肌膚如雪馋没。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天降传,我揣著相機與錄音篷朵,去河邊找鬼。 笑死婆排,一個胖子當著我的面吹牛声旺,可吹牛的內容都是我干的。 我是一名探鬼主播段只,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼腮猖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赞枕?” 一聲冷哼從身側響起澈缺,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炕婶,沒想到半個月后姐赡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡柠掂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年项滑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陪踩。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡杖们,死狀恐怖悉抵,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情摘完,我是刑警寧澤姥饰,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站孝治,受9級特大地震影響列粪,放射性物質發(fā)生泄漏。R本人自食惡果不足惜谈飒,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一岂座、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杭措,春花似錦费什、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至泉懦,卻和暖如春稿黍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背崩哩。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工巡球, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人邓嘹。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓酣栈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親汹押。 傳聞我的和親對象是個殘疾皇子钉嘹,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容

  • 國慶假期如約而至,朋友圈都是秀著回家的照片鲸阻。 今天爸媽出去處理事情跋涣,留小弟和我在家,小弟小我5歲鸟悴,這年齡差說小不小...
    玖盍閱讀 270評論 0 4
  • 昨天被一鄰居姐姐問到“明天情人節(jié)怎么過啊”,先是一愣,眼前浮現(xiàn)出一個又一個男人的臉… 5點一到利赋,群里就開始刷刷出現(xiàn)...
    韋韋ViVi閱讀 304評論 2 8
  • 東北區(qū):金鳳 報道 2020年2月14日水评,東望黑龍江黑河北安德馨課堂的10名志愿者,來到農(nóng)墾社區(qū)...
    93e63647c0f8閱讀 355評論 0 3
  • 01春節(jié)是什么疗涉? 可能在我們現(xiàn)實生活中,很多人只知道要過年了吟秩,要回家團圓了咱扣,要熱熱鬧鬧都放煙花,打炮竹涵防,有些還會守...
    獅子山的雪閱讀 408評論 0 4