查看原文
其他

今日头条海外疫情数据爬取

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:宁刘莹

文字编辑:钱梦璇

技术总编:张   邯

导读



时至四月,国内疫情逐渐稳定,而海外的疫情却仍旧在蔓延,未能得到有效的控制,究竟海外疫情发展到了什么程度?今天我们就从今日头条上爬取实时数据来一探究竟。


首先我们打开今日头条的实时疫情页面,网址如下:
https://i.snssdk.com/ugc/hotboard_fe/hot_list/template/hot_list/forum_tab.html

在该页面点击海外疫情一栏,可以看到有许多国家的实时疫情数据:

与此同时,可以发现页面变换过程中网址并没有发生变化,因此首先要在开发者模式中寻找真实链接,然后将真实链接和请求头拷贝下来。按F12打开开发者模式,可以看到该网站的请求方式为get。

 

首先,我们要导入后面会用到的库:
import requestsimport pandas as pdimport jsonimport numpy as np
接下来将网页内容爬取下来:
url = 'https://i.snssdk.com/forum/ncov_data/?data_type=%5B4%2C5%5D&country_id=%5B%22CHN%22%2C%22ITA%22%2C%22USA%22%2C%22ESP%22%2C%22DEU%22%2C%22KOR%22%2C%22JPN%22%2C%22GBR%22%2C%22IRN%22%2C%22CAN%22%2C%22FRA%22%2C%22SGP%22%2C%22IND%22%5D'headers = { 'accept': 'application/json, text/javascript', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9', 'content-type': 'application/x-www-form-urlencoded', 'cookie': 'SLARDAR_WEB_ID=0e8e3b72-ec18-4f97-a5ea-44c2bf6ef717', 'referer': 'https://i.snssdk.com/ugc/hotboard_fe/hot_list/template/hot_list/forum_tab.html', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36', 'x-requested-with': 'XMLHttpRequest'}html= requests.get(url)print(html)

返回状态码为200,表示成功爬取。
 
我们先观察下爬取的网页:

我们需要的是“’overseasdata’:”后面所对应的数据,也就是海外疫情数据。但由于该网页是一个json文件,因此先将格式进行转化为字典,再提取字典中“overseasdata”键所对应的值:
htmltext=html.texthtmlpage=json.loads(htmltext) overseas_data=htmlpage['overseas_data']htmldic = json.loads(overseas_data)totallist = htmldic['country']print(totallist)

由于数据种类很多,我们这里只提取最主要的国家名称、累计确诊人数、新增确诊人数和确诊率。可以观察到,国家和确诊率是“name”以及“confirmedPerMil”所对应的值,但累计确诊人数和新增确诊人数在字典嵌套的字典中:

确定好位置之后,我们将国家、累计确诊人数、新增确诊人数和确诊率四种数据分别提取到一个列表中,再使其成为一个n行四列的数据结构即可:
name=[]confirmedTotal=[]confirmedIncr=[]confirmedPerMil=[]
for unit in totallist: name.append(unit['name']) confirmedTotal.append(unit['countryTotal']['confirmedTotal']) confirmedIncr.append(unit['countryIncr']['confirmedIncr']) confirmedPerMil.append(unit['confirmedPerMil'])
fin=[]for i in zip(name,confirmedTotal,confirmedIncr,confirmedPerMil): #print(list(i)) fin.append(list(i))df=pd.DataFrame(fin,columns=['国家', '累计确诊', '新增确诊', '每百万人口确诊数'])
接下来,就可以导出到excel中啦:
file='./overseas.xlsx'df.to_excel(file)

按照累计确诊降序排列发现,截止到小编爬虫当天,累计确诊人数最多的三个国家分别是美国、西班牙和意大利,其中美国累计确诊人数达到了三十多万。
除此之外,各位也可以在本程序的基础上进行更多的改编,爬取更多更详细的数据进行更深层次的分析。
最后,希望各个国家疫情都能够早日稳定,我们一起努力,携手等待春暖花开的那一天。






对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

anythingtodate带你轻松处理日期

_variables介绍
查询12306车次信息
海外疫情仍严峻,劝君更在家中留
国外疫情怎么看?——实时新闻获真知

基于贝叶斯定理的算法——朴素贝叶斯分类

中国知网爬虫(CNKI) 批量下载PDF格式论文
sencode命令介绍
Ftools命令组之fisid命令和fsort命令介绍
“抽丝剥茧”,层层下分——机器学习基本算法之决策树

爬取东方财富网当日股票交易情况

stata调用python爬取时间数据——借他山之石以攻玉

全国31省GDP排行强势登场!
接力《发哨子的人》Stata版
批量实现WORD转PDF

Stata有问必答环节

我听到了企业的哀鸣
“物以类聚”、“近朱者赤”——机器学习初探之KNN

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存