手把手教你用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的爬虫与数据分析之路】后台,请输入疫情数据获取。另外,本次爬取的只包含累计确诊人数,若还需要现有确诊、治愈等数据的可以自行分析更改,也可以私聊我。


分享到:


相關文章: