Python新型冠状病毒疫情数据自动爬取+统计+发送报告+数据屏幕(三)发送篇

在这里插入图片描述

今天介绍的项目是使用 Itchat 发送统计报告

项目功能设计:
  1. 定时爬取疫情数据存入Mysql
  2. 进行数据分析制作疫情报告
  3. 使用itchat给亲人朋友发送分析报告(本文)
  4. 基于Django做数据屏幕
  5. 使用Tableau做数据分析

来看看最终效果
在这里插入图片描述
目前已经完成,预计2月12日前更新

使用 itchat 发送数据统计报告

  • itchat 是一个基于 web微信的一个框架,但微信官方并不允许使用这种类型模块,所以近几年注册的微信无法使用 itchat 想知道自己的微信能否使用 itchat 登陆 微信网页版 试一试能否登陆,如果可以登陆那么恭喜你可以使用 itchat 开发一些有趣的东西,如果不能使用,那么也没关系我们可以使用一些发送短信的接口,或者使用 python 发送邮件的模块也可以达到效果,下图是微信机器人自动发送的消息报告:
    在这里插入图片描述

  • 分析问题:我们的目的是使用 itchat 定时发送报告,而且要有交互聊天功能,前面提到过青云客机器人我们这次项目就使用它来回复聊天,要做到这两点,我们必须使用多任务,所以这次程序使用了 python 多线程多方式来实现这些功能,让主进程运行 itchat聊天机器人程序 创建一个线程来定时爬取数据,发送数据报告

  • 源码展示环节:
    这次的源码是结合了这过个系列前两篇文章的延伸,如果你也想要搭建一个这样的机器人,你需要先去看看我这个系列前面的两篇博客,创建数据库,搭建mysql,这次我就不仔细讲解源码了,itchat API 也比较简单,我就简单介绍一下,如果你想使用需要修改和注意到一些地方,先看看源码:

import re
import time
import json
import datetime
import threading
import requests
import pymysql
import itchat
import pandas as pd@itchat.msg_register(itchat.content.TEXT)
def print_content(msg):start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(msg["CreateTime"]))friend_name = itchat.search_friends(userName=msg['FromUserName'])['NickName']print(start_time, friend_name)if friend_name in ["微信名1", "微信名2"]:  # 允许启动聊天程序的对象,就是你想让聊天机器人自动回复谁给你发的微信:把微信名放在列表里if friend_name == "自己的微信名":  # 自己的微信名if msg['Text'].split(":")[0] == "nlp":itchat.send(nlp_chat(msg['Text'].split(":")[1]), toUserName="filehelper")else:itchat.send("bAI: " + nlp_chat(msg['Text']), toUserName=msg["FromUserName"])def nlp_chat(msg):url = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=%s" % msgresponse = requests.get(url)content = json.loads(response.content.decode())if content["result"]:return "哈哈😀"else:return content["content"]class VirusSupervise(threading.Thread):def __init__(self):threading.Thread.__init__(self)self.url = 'https://3g.dxy.cn/newh5/view/pneumonia?scene=2&clicktime=1579582238&enterid=1579582238&from=timeline&isappinstalled=0'self.rumor_url = "https://3g.dxy.cn/newh5/view/pneumonia_rumors?from=dxy"self.all_data = list()self.host_ip = "39.107.99.31"  # 39.107.99.31self.host_user = "cooh"  # coohdef run(self):while True:num = 9sleep_time = 3600 * num  # 一小时time.sleep(10)self.insert_wis_sql()  # 更新数据库self.send_msg()  # 发送消息def request_page(self):"""请求页面数据"""res = requests.get(self.url)res.encoding = 'utf - 8'pat0 = re.compile('window.getAreaStat = ([\s\S]*?)</script>')data_list = pat0.findall(res.text)data = data_list[0].replace('}catch(e){}', '')data = eval(data)return datadef deep_spider(self, data, province_name):"""深度提取出标签里详细的数据:param data::param province_name::return:"""for temp_data in data:self.all_data.append([temp_data["cityName"], temp_data["confirmedCount"], temp_data["curedCount"],temp_data["deadCount"], province_name, datetime.date.today(),datetime.datetime.now().strftime('%H:%M:%S')])def filtration_data(self):"""过滤数据"""temp_data = self.request_page()province_short_names, confirmed_counts, cured_counts, dead_counts = list(), list(), list(), list()for i in temp_data:province_short_names.append(i['provinceShortName'])  # 省份confirmed_counts.append(i['confirmedCount'])  # 确诊cured_counts.append(i['curedCount'])  # 治愈dead_counts.append(i['deadCount'])  # 死亡self.deep_spider(i['cities'], i["provinceShortName"])  # 深度解析数据添加到实例属性中data_all = pd.DataFrame(self.all_data, columns=["城市", "确诊", "治愈", "死亡", "省份", "日期", "时间"])# print(data_all[data_all["省份"] == "陕西"])df = pd.DataFrame()df['省份'] = province_short_namesdf['确诊'] = confirmed_countsdf['治愈'] = cured_countsdf['死亡'] = dead_countsprint(df)# data_all.to_csv("疫情数据_1.csv", encoding="utf_8_sig")return data_all@staticmethoddef insert_sql(data):coon = pymysql.connect(host="127.0.0.1", user="root", password="963369", database="epidemic_data",charset="utf8")number = int(pd.read_sql("select cycle from data_all order by id DESC limit 1", coon)["cycle"].to_list()[0]) + 1print("正在插入数据mysql: ", number)cursor = coon.cursor()  # 创建事务sql = "insert into data_all(cityName, confirmedCount, curedCount, deadCount, province_name, " \"date_info, detail_time, cycle) values(%s, %s, %s, %s, %s, %s, %s, %s)"print("正在插入数据...")for cityName, confirmedCount, curedCount, deadCount, province_name, date_info, detail_time in zip(data["城市"],data["确诊"], data["治愈"], data["死亡"], data["省份"], data["日期"], data["时间"]):cursor.execute(sql, (cityName, confirmedCount, curedCount, deadCount, province_name, date_info, detail_time, number))coon.commit()print("数据插入完成...")cursor.close()coon.close()def insert_wis_sql(self):data = self.filtration_data()self.insert_sql(data)coon = pymysql.connect(host=self.host_ip, user=self.host_user, password="963369", database="epidemic_data", charset="utf8")number = int(pd.read_sql("select cycle from all_data order by id DESC limit 1", coon)["cycle"].to_list()[0]) + 1print("正在向阿里云服务器插入数据: ", number)cursor = coon.cursor()  # 创建事务sql = "insert into all_data(cityName, confirmedCount, curedCount, deadCount, province_name, " \"date_info, detail_time, cycle) values(%s, %s, %s, %s, %s, %s, %s, %s)"print("正在插入数据...")for cityName, confirmedCount, curedCount, deadCount, province_name, date_info, detail_time in zip(data["城市"],data["确诊"], data["治愈"], data["死亡"], data["省份"], data["日期"], data["时间"]):cursor.execute(sql, (cityName, confirmedCount, curedCount, deadCount, province_name, date_info, detail_time, number))coon.commit()print("数据插入完成...")cursor.close()coon.close()def send_msg(self):content = self.data_analysis()  # 提取数据分析报告name_list = ["爸爸", "妈妈", "姐姐"]  # 这个列表里放的是聊天机器人发送报告的对象,就是你打算给哪些人发送报告itchat.auto_login(hotReload=True)for name in name_list:temp_info = itchat.search_friends(name)[0]["UserName"]itchat.send(content, toUserName=temp_info)def data_analysis(self):"""数据分析返回结果:return:"""importance_province = "陕西"  # 你所在的省市(注意数据库里是否有此数据)importance_city = "西安"  # 你所在的城市(同上) result中的需要自己修改result = "您好!\n我是你的智能疫情监控机器人ABL\n现在是北京时间: %s %s\n%s\n在十二小时内\n全国内陆" \"30个地区:\n总病例:%s\n全国新增病例:%s\n西安新增病例:%s 积累病例:%s\n陕西积累病例:%s\n下面是新增疫情详细数据:%s疫情期间,注意保护好自己和家" \"人的健康\n如什么问题可以问我哦"  # 时间 天气 昨天时间 今日时间 疫情数据coon = pymysql.connect(host=self.host_ip, user=self.host_user, password="963369", database="epidemic_data",charset="utf8")number = pd.read_sql("select cycle from all_data order by id DESC limit 1", coon)["cycle"].to_list()[0]data1 = pd.read_sql("select * from all_data where cycle = %s" % number, coon)data2 = pd.read_sql("select * from all_data where cycle = %s" % (int(number) - 1), coon)now_time = data1.date_info.unique()[0] + " " + data1.detail_time.unique()[0]  # 查询数据收集时间week_info = self.get_week_day(datetime.date.today())weather = self.get_window()  # 天气数据all_num = data1["confirmedCount"].sum()  # 目前总人数add_all_num = data1["confirmedCount"].sum() - data2["confirmedCount"].sum()  # 总新增人数sx_all = data1[data1["province_name"] == importance_province]["confirmedCount"].sum()add_xian = int(data1[data1["cityName"] == importance_city]["confirmedCount"]) - \int(data2[data2["cityName"] == importance_city]["confirmedCount"])  # 西安新增人数xian_all = int(data1[data1["cityName"] == importance_city]["confirmedCount"])temp_a1 = data1.groupby("province_name")["confirmedCount"].sum()temp_a2 = data2.groupby("province_name")["confirmedCount"].sum()add_city = (temp_a1 - temp_a2).sort_values(ascending=False)add_city = add_city[add_city.values != 0]  # 新增地区及人数result_str = "\n"for city_name, number in zip(add_city.index.tolist(), add_city.values.tolist()):str_data = str(city_name) + "新增病例: " + str(number) + "\n"result_str += str_datadanger_area = data2.groupby("province_name")["confirmedCount"].sum().sort_values(ascending=False)[: 10]danger_str = "\n"  # 疫情严重地区可以自己添加for city_name, number in zip(danger_area.index.tolist(), danger_area.values.tolist()):str_data = str(city_name) + "出现病例: " + str(number) + "\n"danger_str += str_dataresult = result % (str(now_time).split(" ")[1], week_info, weather, all_num, add_all_num,add_xian, xian_all, sx_all, result_str)coon.close()return result@staticmethoddef get_week_day(date):week_day = {0: '星期一',1: '星期二',2: '星期三',3: '星期四',4: '星期五',5: '星期六',6: '星期日',}day = date.weekday()  # weekday()可以获得是星期几return week_day[day]@staticmethoddef get_window():url = "http://api.qingyunke.com/api.php?key=free&appid=0&msg=%E8%A5%BF%E5%AE%89%E5%A4%A9%E6%B0%94"response = requests.get(url)content = json.loads(response.content.decode())if content["result"]:return "未获取到天气信息"else:return content["content"]if __name__ == '__main__':# itchat.auto_login(hotReload=True, enableCmdQR=2)  # 如果你打算部署到服务器上,请使用这行代码,注释掉下面那行itchat.auto_login(hotReload=True)sup = VirusSupervise()sup.start()itchat.run()
  • 下面介绍需要修改到地方:
    在这里插入图片描述
    print_content() 这个函数是负责接受消息和自动回复消息,你需要向 for 循环到那个列表里,添加允许加入自动聊天人到微信名,就是谁给发消息需要机器人来给他回复,里面有他到微信名,注意是微信名,程序会自动回复消息,如果没有就不会做处理
    在这里插入图片描述
    send_msg() 这个模块是用来发送数据报告的,name_list 这里是你希望给哪些微信好友每天定时发送数据报告,将他们的“微信备注名”填写到列表里。
    在这里插入图片描述
    importance_province = “陕西” # 你所在的省市(注意数据库里是否有此数据)
    importance_city = “西安” # 你所在的城市(同上) result中的需要自己修改

如果感兴趣到话,可以自己试试,如果还没有看这个系列的前两篇文章,请先按前两篇文章的内容来操作,有问题欢迎交流!点个赞吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18709.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 爬取国内各省份新冠疫情历史数据(来自腾迅疫情)

数据接口&#xff1a; https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?adCode310000其中&#xff0c;adCode 是地区地理编码&#xff0c;可参考&#xff1a;python 全国行政地区信息爬取-腾迅位置服务平台请求方式&#xff1a; GET返回数据类型&#xff1a; J…

Python采集全球疫情数据并做可视化分析

嗨嗨&#xff0c;大家好~ 今天真的是刚睡醒就知道RNG八人确诊&#xff0c;这年头出国打个比赛都这么不容易&#xff0c;希望早日康复~ 唉&#xff0c;今天就教你们 如何用Python采集全球疫情数据&#xff0c;并做可视化分析 知识点: 爬虫基本流程requests 发送请求re 正则表…

【大数据平台】基于Spark的美国新冠肺炎疫情数据分析及预测

一、选题背景 新型冠状病毒疫情是由严重急性呼吸系统综合征冠状病毒2&#xff08;SARS-CoV-2&#xff09;导致的2019冠状病毒病&#xff08;COVID-19&#xff09;所引发的全球大流行疫情。该疾病在2019年末于中华人民共和国湖北省武汉市首次爆发&#xff0c;随后在2020年初迅速…

chatgpt画思维导图

场景&#xff1a; chatgpt写思维导图代码&#xff0c;进而在专门的软件中生成思维导图 方法 在提问中&#xff0c;输入需要的思维导图代码格式

ChatGPT与网络安全的跨时代对话

前言 ChatGPT&#xff1a;是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#xff0c;甚至能完成撰写邮件、视频脚本、文案、翻译、代码等任务。G…

ChatGPT实现数据结构转换

数据结构转换 在应用系统开发和维护中&#xff0c;经常会有配置数据或客户数据需要在不同的序列化结构中相互转换的需求。不同编程语言之前&#xff0c;对数据结构的偏好也不一样&#xff0c;比如 JavaScript 一般使用 JSON、Java 一般使用 XML、Ruby 一般使用 YAML、Golang 一…

springboot3 笔记(雷峰阳)

文章目录 springboot3核心特性SpringBoot3-快速入门环境要求SpringBoot是什么快速体验1. 开发流程1. 创建项目2. 导入场景3.主程序4. 业务5. 测试6. 打包 2. 特性小结1. 简化整合2. 简化开发3. 简化配置5. 简化运维 3. Spring Initializr 创建向导3、应用分析1. 依赖管理机制2.…

我靠海外抖音搬运视频赚到了人生第一桶金:这个风口行业,真的很赚钱

在2022年新一轮疫情期间&#xff0c;“有啥方法&#xff0c;可在家快速赚钱&#xff1f;”冲上了热门话题。 “好想挣钱啊...…”单位难开工&#xff0c;生意不开张&#xff0c;咱们才惊醒&#xff1a;“领死工资的生活&#xff0c;真的好脆弱。” 平时总说副业赚钱&#xff0c…

腾讯股票接口、和讯网股票接口、新浪股票接口、雪球股票数据、网易股票数据...

2019独角兽企业重金招聘Python工程师标准>>> 腾讯股票接口&#xff1a; 分时图 http://data.gtimg.cn/flashdata/hushen/minute/sz000001.js?maxage110&0.28163905744440854 五天分时图 http://data.gtimg.cn/flashdata/hushen/4day/sz/sz000002.js?maxage432…

移动端APP——微信(1)手机桌面控件和启动画面显示与隐藏

微信原型设计1&#xff1a;手机桌面控件和启动画面显示与隐藏 微信原型设计运用的是产品原型设计软件Axure RP Pro 7.0 版。 一、手机桌面绘制 手机的外壳和桌面、以及微信图标都是直接引用的图片库中图片&#xff0c;将元件库中的image拖入&#xff0c;并单击右键导入图片即…

android 那个桌面好,Hola桌面 可能是最好用的安卓手机桌面

如果你是一名安卓手机用户&#xff0c;你可能会有这样的感觉&#xff0c;手机自带的系统桌面一般都比较鸡肋&#xff0c;不能自定义自己喜欢的样式&#xff0c;或者说是扩展性不尽人意。如果你不甘心这一切&#xff0c;你也许尝试过一些手机桌面产品&#xff0c;但能让你一直坚…

android 如何自定义桌面,安卓手机桌面设置教程 个性化你的桌面

Android系统是一款功能非常的强大的全球智能手机操作系统&#xff01;而相对于一些新手来说&#xff0c;熟练的操作安卓手机非常的难&#xff0c;那么下面我就安卓手机桌面设置来给新手用户一个简单的教程&#xff0c;让你的手机桌面变的更加的人性化&#xff01; 随着谷歌Adro…

android 手机桌面,安卓手机桌面介绍:教你认识安卓手机桌面

一个新手拿到手机&#xff0c;开机后看到的第一个画面就是桌面了&#xff0c;想要玩转整个手机&#xff0c;那么就先把桌面的各个功能都了解下吧。一般来说&#xff0c;刚买的新手机都是用的自带桌面&#xff0c;不同品牌的手机也是各不相同&#xff0c;但是功能方面都是大同小…

倡议书:关于暂停「巨型 AI」 实验的一封公开信

本文是 futureoflife 公开信&#xff0c;原文地址 https://futureoflife.org/open-letter/pause-giant-ai-experiments/ 目前已经有 1127 1127 1127 名 AI 学者参与签署。 以下为正文&#xff1a; 本文提出呼吁所有人工智能实验室立即暂停比 GPT-4 更强大的人工智能系统的训练…

ChatGPT vs 谷歌PaLM2,人类堕入“囚徒困境”?

前言 chatgpt的连续火爆&#xff0c;可以说是IT界近几十年来为数不多的超量话题&#xff0c;几乎各行各业都开始了chatgpt的研究。chatgpt受到的关注度可以说是无可估量的。各大巨头的纷纷加入也是它不断的推上热浪的关键。 最近看的一篇热文很有意思&#xff0c;全面分析透彻…

2023-05-31【02】ChatGPT 之父警告 AI 可能灭绝人类,350 名 AI 权威签署公开信

今天&#xff0c;AI 领域传出一封重要的公开信。 包括 「ChatGPT 之父」Sam Altman 在内 350 位 AI 权威都签署了这封联名公开信&#xff0c;并对当前正在开发的 AI 技术可能会对人类构成生存威胁担忧。 这封信只有一句声明&#xff1a;降低人工智能灭绝的风险&#xff0c;应该…

“ChatGPT之父”等350名业内人士签署公开信并警告:AI可能灭绝人类

人们对 AI 技术的发展和应用有了更加深入的思考与探讨。 日前&#xff0c;超过350名人工智能&#xff08;AI&#xff09;领域的行业高管、专家和教授签署了一封公开信&#xff0c;他们在信中警告称&#xff0c;AI可能给人类带来灭绝风险。 这份公开信发布在非营利组织人工智能…

万字详述! ChatGPT 之父承认 GPT-5 并不存在,为什么 OpenAI 总是这么实诚?

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号 第一时间获取价值内容 来源: 爱范儿 微信号&#xff1a;ifanr 最近&#xff0c;OpenAI 的 CEO Sam Altman 在一场公开会议上为 GPT-5 辟谣。 他声称 OpenAI 并没有在训练 GPT-5&#xff0c;而是一直基于 GPT-4 做别…

ChatGPT 之父承认 GPT-5 并不存在,为什么 OpenAI 总是这么实诚?|万字详述

ChatGPT 诞生前传 来源: 爱范儿 微信号&#xff1a;ifanr 最近&#xff0c;OpenAI 的 CEO Sam Altman 在一场公开会议上为 GPT-5 辟谣。 他声称 OpenAI 并没有在训练 GPT-5&#xff0c;而是一直基于 GPT-4 做别的工作。 OpenAI 是一家非常有趣的机构&#xff0c;和微软、Go…