疫情数据统计

疫情数据统计

武汉疫情牵动着全国人名的心,每天都关注着疫情的发展,有时候去关注做了很多的无用功,于是想着偷偷懒,只要疫情发生变化,微信将会受到消息

文章目录

  • 疫情数据统计
    • 1.抓取腾讯疫情地图数据
      • 1.1 F12观察网页特点
        • 1.1.1 腾讯的疫情地图url=https://news.qq.com/zt2020/page/feiyan.htm
        • 1.1.2 F12查看google网页请求以及应答
        • 1.1.3 使用Search筛选数据包
        • 1.1.4 分析请求url以及response
        • 1.1.5使用[json数据解析网址](https://www.json.cn/)
      • 1.2 模拟浏览器请求
    • 2.提取关注的信息
      • 2.1 遇到的问题
      • 2.2 提取全国、湖南省等疫情信息
    • 3.使用server酱接收微信消息
      • 3.1 推荐一款好用的[微信提醒工具](http://sc.ftqq.com/3.version)
      • 3.2 使用server酱服务效果图
    • 4.阿里云服务器部署py脚本
      • 4.1 阿里云服务器运行
    • 5.源码分享

1.抓取腾讯疫情地图数据

1.1 F12观察网页特点

1.1.1 腾讯的疫情地图url=https://news.qq.com/zt2020/page/feiyan.htm

1.1.2 F12查看google网页请求以及应答

疫情数据统计_第1张图片

1.1.3 使用Search筛选数据包

这样能快速的找到需要的数据请求的信息,能够快速定位数据
疫情数据统计_第2张图片

1.1.4 分析请求url以及response

写代码时因为惯性思维,看到这个url以为这个将是post请求,最后请求的数据并不是完全的json格式,数据提取的时候纠结了返回的数据很久。。。
URL=https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5
在这里插入图片描述

1.1.5使用json数据解析网址

疫情数据统计_第3张图片

1.2 模拟浏览器请求

在这里插入图片描述

2.提取关注的信息

2.1 遇到的问题

(1)使用post方法获得的数据一直带着如下图字符串,在这儿纠结了很久。。。晕死
在这里插入图片描述
结果是自己请求方法搞错了。
(2)应答的数据虽然是json格式,但并没有按照常规出牌,尽然是一维的,在这耽误了很久,之前没注意,一直试着常规的方法访问字典,再仔细看看下面数据中的引号(“”),真的是柳暗花明又一村
疫情数据统计_第4张图片(3)访问了data的值之后数据是str类型,不过文本内容任然是字典的格式,于是使用函数将文本转化成字典格式
在这里插入图片描述

2.2 提取全国、湖南省等疫情信息

由于返回的数据是已经排序的数据,因此需要查找需要的数据

        for i in range(len(dict_data["areaTree"][0]["children"])):
            if dict_data["areaTree"][0]["children"][i]["name"]=="湖南":
                for j in range(len(dict_data["areaTree"][0]["children"][i]["children"])):
                    if dict_data["areaTree"][0]["children"][i]["children"][j]["name"]=="衡阳":
                        index1=i
                        index2=j
                        break

3.使用server酱接收微信消息

3.1 推荐一款好用的微信提醒工具

疫情数据统计_第5张图片

3.2 使用server酱服务效果图

疫情数据统计_第6张图片

4.阿里云服务器部署py脚本

4.1 阿里云服务器运行

自己以前都没有接触过Linux,为了补充知识面,买了阿里云的学生特价服务器,想借此练手,于是百度了很多关于py脚本如何在Ubuntu服务器后台运行,Ubuntu初始就装载了python2.7和python3.5版本,这就方便了我们的程序运行。Linux学习进行中~~请多指教
(1)使用Xshell上传py文件
疫情数据统计_第7张图片(2)Linux指令后台运行脚本
在这里插入图片描述

5.源码分享

import requests
import json
import time
def post_data():
    url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
    chrome_info={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0'}
    re1=requests.get(url,headers=chrome_info)
    data1=re1.json()
    #print(data1)
    data=json.loads(data1["data"])
    #print(data)
    print("爬取信息")
    return data
if __name__=="__main__":
    #调用腾讯疫情地图接口API
    signal=0
    while True:
        dict_data=post_data()
        for i in range(len(dict_data["areaTree"][0]["children"])):
            if dict_data["areaTree"][0]["children"][i]["name"]=="湖南":
                for j in range(len(dict_data["areaTree"][0]["children"][i]["children"])):
                    if dict_data["areaTree"][0]["children"][i]["children"][j]["name"]=="衡阳":
                        index1=i
                        index2=j
                        break
        if signal!=dict_data["chinaTotal"]["confirm"]:
            url = "https://sc.ftqq.com/SCU62999Td6e569532603a70f16b3fc9955667e085d907316d5ed1.send"
            form_data={
                'text':dict_data["lastUpdateTime"]+'疫情信息',
                'desp':["全国数据\n确诊数%s 待确诊%s 死亡人数%s 治愈人数%s"%(dict_data["chinaTotal"]["confirm"],dict_data["chinaTotal"]["suspect"],dict_data["chinaTotal"]["dead"],dict_data["chinaTotal"]["heal"])+'-------------------------------------------------'+
                    "湖南省汇总数据\n确诊数%s 待确诊%s 死亡人数%s 治愈人数%s" % (dict_data["areaTree"][0]["children"][index1]["total"]["confirm"],
                                                                dict_data["areaTree"][0]["children"][index1]["total"]["suspect"],
                                                                dict_data["areaTree"][0]["children"][index1]["total"]["dead"],
                                                                dict_data["areaTree"][0]["children"][index1]["total"]["heal"])+'-------------------------------------------------'+
                        "衡阳总计\n确诊人数%s 待确诊人数%s 死亡人数%s 治愈人数%s"%(dict_data["areaTree"][0]["children"][index1]["children"][j]["total"]["confirm"],dict_data["areaTree"][0]["children"][index1]["children"][j]["total"]["suspect"],dict_data["areaTree"][0]["children"][index1]["children"][j]["total"]["dead"],dict_data["areaTree"][0]["children"][index1]["children"][j]["total"]["heal"])+'-------------------------------------------------'+
                        "衡阳今日数据\n新增确诊人数%s 新增待确诊人数%s 新增死亡人数%s 新增治愈人数%s" % (
                        dict_data["areaTree"][0]["children"][index1]["children"][index2]["today"]["confirm"],
                        dict_data["areaTree"][0]["children"][index1]["children"][index2]["today"]["suspect"],
                        dict_data["areaTree"][0]["children"][index1]["children"][index2]["today"]["dead"],
                        dict_data["areaTree"][0]["children"][index1]["children"][index2]["today"]["heal"])
                    ]
                    }
            send = requests.post(url,data=form_data)
            print("发送消息成功")
        signal = dict_data["chinaTotal"]["confirm"]
        time.sleep(60)

你可能感兴趣的:(py爬虫之路)