手把手教你用python爬取國內外最新疫情歷史數據

手把手教你用python爬取國內外最新疫情歷史數據


最近好多學生在問我要各類疫情數據,好像全國各地的老師們對疫情數據的分析都很感興趣,小編實在不忍心看你們到處找數據,俗話說的好,“授之以魚不如授之以漁”,所以小編今天就把爬疫情歷史數據的方法分享給你們。

基本思路:分析騰訊新聞“抗肺炎”版塊,採用“倒推法”找到疫情數據接口,然後用python模擬請求,進而保存疫情歷史數據。

一、分析數據接口


1.進入海外疫情主頁,分析海外各國疫情歷史數據接口:
https://news.qq.com/zt2020/page/feiyan.htm#/global

手把手教你用python爬取國內外最新疫情歷史數據


打開流量分析工具,以“美國”為例,點擊詳情

手把手教你用python爬取國內外最新疫情歷史數據


選中第一個出現的json文件,發現響應數據為美國從1月28日至今天的疫情數據,包括確診新增(confirm_add)、確診(confirm)、治癒(heal)以及死亡(dead)數據。

該次請求的具體信息為:

手把手教你用python爬取國內外最新疫情歷史數據

以post請求的方式,網址為:
https://api.inews.qq.com/newsqa/v1/automation/foreign/daily/list?country=國家名稱


2. 進入國內疫情主頁,分析國內各省疫情歷史數據接口:
https://news.qq.com/zt2020/page/feiyan.htm#/global

打開流量分析工具,以“黑龍江”為例,點擊

詳情


手把手教你用python爬取國內外最新疫情歷史數據


選中第一個出現的json文件,發現響應數據為黑龍江從1月28日至今天的疫情數據,包括確診新增(confirm_add)、確診(confirm)、治癒(heal)以及死亡(dead)數據該次請求的具體信息為:


手把手教你用python爬取國內外最新疫情歷史數據


以post請求的方式,網址為:
https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province=各省名稱

3.同理分析出省內各市的歷史數據接口:


手把手教你用python爬取國內外最新疫情歷史數據


以post請求的方式,網址為:
https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province=省名稱&city=市名稱

4.分析找到海外各國、國內各省、省內各市的名稱

打開流量分析工具,在網址中輸入:
https://news.qq.com/zt2020/page/feiyan.htm#/global

①打開請求網址為
https://view.inews.qq.com/g2/getOnsInfo?name=disease_foreign&callback=
jQuery34105534161076800497_1587272333891&_=1587272333892

的響應窗口:


手把手教你用python爬取國內外最新疫情歷史數據


返回數據中包含所有國家的名稱。

②打開請求網址為:


https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=
jQuery34105534161076800497_1587272333887&_=1587272333888的響應窗口:


手把手教你用python爬取國內外最新疫情歷史數據


返回數據包含全國各省市的名稱。

第二步:開始寫程序

1.模擬爬取海外各國曆史疫情數據

根據第一步分析結果,先爬取各個國家名稱,然後構造url爬取各個國家的歷史數據代碼如下:

<code>all_data = {}   

for

i

in

foreignList: url =

'https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?country={0}'

.format(i[

'name'

]) response = requests.post(url, headers=header) data = json.loads(response.text)[

'data'

] all_data[i[

'name'

]] =data print(all_data)

def

sortdate

(today)

:

list1 = today.split(

'.'

) today =

'2020年'

+list1[

0

].replace(

'0'

,

''

)+

'月'

+list1[

1

]+

'日'

return

today workbook = xlwt.Workbook(encoding=

'utf-8'

) worksheet =workbook.add_sheet(

'My Worksheet'

)

for

i

in

all_data.keys(): wb = xlrd.open_workbook(

'海外各國.xls'

) tabsheet = wb.sheets()[

0

] k = tabsheet.nrows

for

t, j

in

enumerate(all_data[i]): worksheet.write(k+t,

0

, i) worksheet.write(k+t,

1

, sortdate(str(j[

'date'

]))) worksheet.write(k+t,

2

, j[

'confirm'

]) workbook.save(

'海外各國.xls'

)/<code>


2.模擬爬取國內各省疫情數據 根據第一步分析結果,先爬取各個省的名稱,然後構造url爬取各個省的歷史數據,代碼如下:


<code>all_data = {}   

for

i

in

result[

0

][

'children'

]: url =

'https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?province={0}'

.format(i[

'name'

]) response = requests.post(url, headers=header) data = json.loads(response.text)[

'data'

] all_data[i[

'name'

]] = data

def

sortdate

(today)

:

list1 = today.split(

'.'

) today =

'2020年'

+list1[

0

].replace(

'0'

,

''

)+

'月'

+list1[

1

]+

'日'

return

today workbook = xlwt.Workbook(encoding=

'utf-8'

) worksheet = workbook.add_sheet(

'My Worksheet'

)

for

i

in

all_data.keys(): wb = xlrd.open_workbook(

'各省疫情數據.xls'

) tabsheet = wb.sheets()[

0

] k = tabsheet.nrows

for

t, j

in

enumerate(all_data[i]): worksheet.write(k+t,

0

, i) worksheet.write(k+t,

1

, sortdate(str(j[

'date'

]))) worksheet.write(k+t,

2

, j[

'confirm'

]) workbook.save(

'各省疫情數據.xls'

)/<code>


3.模擬爬取省內各市疫情數據

根據第一步分析結果,先爬取該省各市的名稱,然後構造url爬取各個市的歷史數據,代碼如下:

<code>all_data = {}   

for

i

in

result[

0

][

'children'

]:

if

i[

'name'

]==

'黑龍江'

:

for

j

in

i[

'children'

]: url =

'https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?'

\

'province={0}&city={1}'

.format(i[

'name'

], j[

'name'

]) response = requests.post(url, headers=header) data = json.loads(response.text)[

'data'

] all_data[j[

'name'

]] = data

def

sortdate

(today)

:

list1 = today.split(

'.'

) today =

'2020年'

+list1[

0

].replace(

'0'

,

''

)+

'月'

+list1[

1

]+

'日'

return

today workbook = xlwt.Workbook(encoding=

'utf-8'

) worksheet = workbook.add_sheet(

'My Worksheet'

)

for

i

in

all_data.keys(): wb = xlrd.open_workbook(

'各市疫情數據.xls'

) tabsheet = wb.sheets()[

0

] k = tabsheet.nrows

for

t, j

in

enumerate(all_data[i]): worksheet.write(k+t,

0

, i) worksheet.write(k+t,

1

, sortdate(str(j[

'date'

]))) worksheet.write(k+t,

2

, j[

'confirm'

]) workbook.save(

'各市疫情數據.xls'

)/<code>

第三步:效果展示


手把手教你用python爬取國內外最新疫情歷史數據


1.海外各國疫情數據:


手把手教你用python爬取國內外最新疫情歷史數據


2.國內各省疫情數據:


手把手教你用python爬取國內外最新疫情歷史數據


3.黑龍江各市疫情數據:


手把手教你用python爬取國內外最新疫情歷史數據


本文所述的三類代碼、表格已上傳至【python的爬蟲與數據分析之路】後臺,請輸入疫情數據獲取。另外,本次爬取的只包含累計確診人數,若還需要現有確診、治癒等數據的可以自行分析更改,也可以私聊我。


分享到:


相關文章: