1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 爬虫读取疫情数据 可根据兴趣进行调整 并邮件形式每天定时发送

爬虫读取疫情数据 可根据兴趣进行调整 并邮件形式每天定时发送

时间:2018-12-01 21:52:59

相关推荐

爬虫读取疫情数据 可根据兴趣进行调整 并邮件形式每天定时发送

1. 目标

小美虽然已经逐渐意识到疫情的可怕并且做了一定的防范,但是每天依然有一定的增加。

不知道有没有像我一样为美国 “担惊受怕” 的小伙伴,并且懒得每天去支付宝或者其他地方查看疫情。这里提供一个可以满足个性化需求的方法,每天定时爬虫检测数据并以邮件的形式发送给自己。

2. 获得数据

感兴趣的可以直接使用浏览器访问这个接口,获得数据。

import requestsimport jsondef get_page(url): #解析网页headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}try:r=requests.get(url,headers=headers)# print(r.json())r.raise_for_status()r.encoding=r.apparent_encodingreturn r.json()except Exception as e:print("error",e)return "ERROR"url='https://c./ug/api/wuhan/app/data/list-total'cases_json=get_page(url)# 首先拿个美国的所有数据 # json数据解析到 ['data']['areaTree'] 后,# 得到的是一个 数组,根据索引拿到数据,美国的索引为 9USA = cases_json['data']['areaTree'][9]# print(USA)# 今天today = USA['today']# print(today)# 总共total = USA['total']# print(total)# 选择想要的数据answer = '确诊总数:'+str(total['confirm'])+\' 死亡总数:'+str(total['dead'])+\' 今日确诊增加:'+str(today['confirm'])+\' 今日死亡人数:'+str(today['dead'])print(answer)

运行一下,只要求有python环境并且自己电脑能够上网即可。

运行输出如下(注:此时是2月23日22::07):

确诊总数:28826307 死亡总数:512590 今日确诊增加:59257 今日死亡人数:1457

3. 邮件定时发送

参考博客:https://smileyan./article/details/109312411 的内容,把上面获得的数据发送给自己邮箱。

注意,需要根据自己的实际情况填写邮箱地址和密码,以及邮箱服务器。

import smtplibfrom email.mime.text import MIMETextfrom email.header import Headerimport time# 第三方 SMTP 服务mail_host = 'smtp.' #设置服务器mail_user = "root@" #用户名mail_pass="Your password" sender = 'root@'receivers = ['root@'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())message = MIMEText(answer, 'plain', 'utf-8')message['From'] = Header("Python 脚本(by smileyan)", 'utf-8')message['To'] = Header("幸运儿", 'utf-8')subject = datemessage['Subject'] = Header(subject, 'utf-8')try:smtpObj = smtplib.SMTP() smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号smtpObj.login(mail_user,mail_pass) smtpObj.sendmail(sender, receivers, message.as_string())print("邮件发送成功")except smtplib.SMTPException:print("Error: 无法发送邮件")

注意这个需要和上面的拼接起来一起用。

最后的结果可以收到邮件如下:

4.定时邮件发送请参考

https://smileyan./article/details/109312411

5. 其他地区

感谢来自qq_41656449的建议,这里补充一些,如何查询其他地方的疫情情况的代码。

5.1 获得所有地区的索引

上面提到美国数据的索引号为9,这里先获得所有地区的索引号。

import requestsimport jsondef get_page(url): #解析网页headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}try:r=requests.get(url,headers=headers)# print(r.json())r.raise_for_status()r.encoding=r.apparent_encodingreturn r.json()except Exception as e:print("error",e)return "ERROR"url='https://c./ug/api/wuhan/app/data/list-total'cases_json=get_page(url)# 拿到跟地区相关的所有数据的数组allAreas = cases_json['data']['areaTree']# 或取所有的索引和名称for i,area in enumerate(allAreas):name = area['name']print(i,name)

输出内容比较多,这里只列举50个:

0 突尼斯1 塞尔维亚2 中国3 日本本土4 泰国5 新加坡6 韩国7 澳大利亚8 德国9 美国10 马来西亚11 越南12 圣巴泰勒米13 肯尼亚14 伊朗15 以色列16 毛利亚尼亚17 黎巴嫩18 克罗地亚19 奥地利20 瑞士21 希腊22 毛里求斯23 爱沙尼亚24 北马其顿25 白俄罗斯26 立陶宛27 阿塞拜疆28 美属维尔京群岛29 蒙古30 乌克兰31 波兰32 波黑33 蒙特塞拉特34 南非35 布隆迪36 南苏丹37 马耳他38 摩尔多瓦39 保加利亚40 孟加拉41 阿尔巴尼亚42 巴勒斯坦43 科摩罗44 阿富汗45 沙特阿拉伯46 新西兰47 塔吉克斯坦48 泽西岛49 叙利亚50 巴拿马....

5.2 选择自己感兴趣的地区

接着选择自己关注的地区,并找到前面的索引,然后修改下面的代码,就可以获得所有数据了。

import requestsimport jsondef get_page(url): #解析网页headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}try:r=requests.get(url,headers=headers)# print(r.json())r.raise_for_status()r.encoding=r.apparent_encodingreturn r.json()except Exception as e:print("error",e)return "ERROR"url='https://c./ug/api/wuhan/app/data/list-total'cases_json=get_page(url)# 拿到跟地区相关的所有数据的数组allAreas = cases_json['data']['areaTree']# 获得所有地区的名字names_dir = {}# 或取所有的索引和名称for i,area in enumerate(allAreas):names_dir[str(area['name'])] = i############################### 填写自己感兴趣的地区############################areas = ['中国','美国','印度','法国','巴西','日本本土']# 根据名称查询数据for area in areas:index = names_dir[area]areaData = allAreas[index]today = areaData['today']total = areaData['total']# 选择想要的数据answer = '确诊总数:'+str(total['confirm'])+\' 死亡总数:'+str(total['dead'])+\' 今日确诊增加:'+str(today['confirm'])+\' 今日死亡人数:'+str(today['dead'])print('【'+area+'】:',answer)

输出内容如下:

【中国】: 确诊总数:101802 死亡总数:4843 今日确诊增加:24 今日死亡人数:0【美国】: 确诊总数:29052262 死亡总数:520785 今日确诊增加:77377 今日死亡人数:2422【印度】: 确诊总数:11046914 死亡总数:156825 今日确诊增加:16738 今日死亡人数:120【法国】: 确诊总数:3746475 死亡总数:85734 今日确诊增加:25412 今日死亡人数:261【巴西】: 确诊总数:10390461 死亡总数:251498 今日确诊增加:65998 今日死亡人数:1541【日本本土】: 确诊总数:428804 死亡总数:7738 今日确诊增加:1076 今日死亡人数:0

需要注意名字问题,比如说查日本失败,需要改为日本本土

具体名称参考前面5.1部分,总共包含207个地区。

总结

第一篇博客编写完成!Nice ! (最后补充一句,绝对不是幸灾乐祸哈)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。