抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > Python自动化爬取天气预报 疫情 糗事 通过企业微信发送给男女朋友

Python自动化爬取天气预报 疫情 糗事 通过企业微信发送给男女朋友

时间:2021-06-01 07:32:52

相关推荐

概述

Python自动化爬取指定城市天气、疫情和糗事搞笑段子数据信息保存到txt文件,并通过企业微信机器人每天定时发送指定信息到指定群聊

详细

概述

开发这个程序、本来一个py文件就可以开发好、个人是不嫌麻烦的人,所有把步骤弄成多个py文件进行、适合新手参考、

我们先看看效果

准备工作

开发过程中使用的工具

Visual Studio Code - Insiders

pycharm

在开发过程中使用了Python第三方模块、可通过Windows下载方法、cmd命令pip install

import requestsimport osimport reimport jsonimport timeimport codecsfrom datetime import date, datetimefrom urllib import request, errorfrom bs4 import BeautifulSoupfrom apscheduler.schedulers.background import BackgroundScheduler

建立一个企业微信群,然后添加一个机器人

在配置企业微信群里面的机器人拿出它的Webhook网址

实现整个程序的部分代码过程展示

一、首先处理第一个需求、抓取天气预报数据信息并通过企业微信机器人发送、创建一个天气预报发送.py的文件包

1、 先锁定一个天气预报的网址南昌县天气预报,南昌县7天天气预报,南昌县15天天气预报,南昌县天气查询

打开浏览器自带的抓包工具、刷新一下、找到一个叫city.js的文件夹、里面保存着我们想要的数据,这种实时更新的界面一般是通过ajax传入json文件实现的。

2、 找到我们想要的数据包,我们就可以开始写一个程序,先导入requests BeautifulSoup模块

import requestsfrom bs4 import BeautifulSoup

3、 通过requests来获取天气网页信息、先定义一个函数为 get_content

# 获取城市的天气网页信息def get_content(url, data=None): try:r = requests.get(url, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return '产生异常'

4、拿到网页信息后,先找到我们想要的数据标签,通过BeautifulSoup处理和提取我们想要的数据,思路搞清楚了,那代码,它不就来了嘛,在定义一个函数get_data

先处理一下网页数据

# 处理网页信息def get_data(html,city):final_list = []soup = BeautifulSoup(html, 'html.parser')body = soup.bodydata = body.find('div', {'id': '7d'})ul = data.find('ul')lis = ul.find_all('li')

2.找到我们想要数据的标签用BeautifulSoup提取出来

for day in lis:temp_list = [city]date = day.find('h1').stringtemp_list.append(date)info = day.find_all('p')temp_list.append(info[0].string)if info[1].find('span') is None:temperature_highest = ' 'else:temperature_highest = info[1].find('span').stringtemperature_highest = temperature_highest.replace('℃', ' ')if info[1].find('i') is None: #temperature_lowest = ' 'else:temperature_lowest = info[1].find('i').stringtemperature_lowest = temperature_lowest.replace('℃', ' ')temp_list.append(temperature_highest)temp_list.append(temperature_lowest)wind_scale = info[2].find('i').stringtemp_list.append(wind_scale)final_list.append(temp_list)

5、把提取出来的数据保存到txt文件中

#将近七天的天气信息存放在文件中def save_data(data,filename): f=open(filename,"wt")for line in data:f.write(str(line)+'\n')f.close()

写了这么多,终于把这个信息给爬下来了,现在差最后一步、把这个信息通过企业微信机器人发送到指定群聊、整上,定义一个postrsg函数

def postrsg(filename): with open(filename,'r') as f:lines = f.readlines()first = lines[0]sec = lines[1].rstrip("\n")headers = {"Content-Type": "text/plain"}data = {"msgtype": "text","text": {"content": first+sec,}}r = requests.post(url='填写自己企业微信机器人的webhook',headers=headers, json=data)print(r.text)

写到这里、我们第一个需求,天气预报.py文件终于写完了!

二、写了这么多,手感应该是有了吧,那现在写第二个程序吧!那新建一个爬取全国最新疫情信息.py文件吧

1、有了上个程序的基础,那些第二个文件就容易了,我们先看看这个疫情文件包里面的数据是什么

https://view./g2/getOnsInfo?name=disease_h5

打开一看!不管是新手还是老司机,一看这个数据就是json数据

好了,拿到数据,就开始准备动手!

首先我们导入requests、json库

import requestsimport json

2、我们先定义一个Down_data函数,用requests库来获取它的网页信息,然后用json库来编译它的json文件,思路搞清了,来吧!动手

def Down_data():url = 'https://view./g2/getOnsInfo?name=disease_h5'headers = {'填写自己的UA请求头'}r = requests.get(url, headers)res = json.loads(r.text)data_res = json.loads(res['data'])return data_res

3、数据拿到了,我们来处理一下我们想要的数据,定义一个Parse_data1函数,然后在Parse_data1定义一个list列表,开整

list = ['截至时间:' + str(data['lastUpdateTime']) + '\n''全国确诊人数:' + str(data['chinaTotal']['confirm']) + '\n''今日新增确诊:' + str(data['chinaAdd']['confirm']) + '\n''全国疑似:' + str(data['chinaTotal']['suspect']) + '\n''今日新增疑似:' + str(data['chinaAdd']['suspect']) + '\n''全国治愈:' + str(data['chinaTotal']['heal']) + '\n''今日新增治愈:' + str(data['chinaAdd']['heal']) + '\n''全国死亡:' + str(data['chinaTotal']['dead']) + '\n''今日新增死亡:' + str(data['chinaAdd']['dead']) + '\n']result = ''.join(list)

4、有上个程序基础,敲这个是不是简单很多,数据我们拿到了,我们来保存一下,保存txt文件时候,编码要设置成utf-8,不然会乱码,来吧!

with open('疫情查询.txt', 'a+', encoding="utf-8") as f:f.write(result + '\n')

5、最后一步,我想了想,要不还是实现一下搜索城市查询吧,不然有点乱,也很简单,来吧直接干,定义一个Parse_data2函数

def Parse_data2():data = Down_data()['areaTree'][0]['children']path = str(input('请输入你要查询的省份:'))for i in data:if path in i['name']:for item in i['children']:list_city = ['地区: ' + str(item['name']) + ' '' 确诊人数:' + str(item['total']['confirm']),' 新增确诊:' + str(item['today']['confirm']),' 治愈:' + str(item['total']['heal']),# ' 新增治愈:' + str(item['today']['heal']),' 死亡:' + str(item['total']['dead']) + '\n',# ' 新增死亡:' + str(item['today']['dead']) + '\n']res_city = ''.join(list_city)with open('疫情查询.txt', 'a+', encoding="utf-8") as f:f.write(res_city)

好了,我们第二个需求写好了,说真的,写完这两个,都有点麻了,但是手感越来越好了!来吧继续写第三个需求

三、第三个需求我们是爬取糗事搞笑段子,这里要运用到

1、codecs模块进行编码转换

2、re模块正则提取字符串中括号内的内容

3、requests模块获取网页信息

4、urllib模块通过代码模拟浏览器发送请求

5、BeautifulSoup模块提取我们想要的数据

既然思路有了,话不多说,直接开搞

1、先导入模块

import reimport codecsfrom urllib import request, errorfrom bs4 import BeautifulSoup

2、先定义一个askurl函数,来获取信息

def askurl(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'}req = request.Request(url=url, headers=headers)respond = request.urlopen(req)html = respond.read().decode('utf-8')return htmlexcept error.URLError as e:if hasattr(e, 'code'):print(e.code)if hasattr(e, 'reason'):print(e.reason)

3、利用re模块来提取字符串中括号内的内容

FindName = pile(r'<h2>(.*?)</h2>', re.S)FindContent = pile(r'<span>(.*?)</span>', re.S)

4、网页信息我们拿到后,找到我们想要的数据标签通过BeautifulSoup来进行提取,定义一个getdata函数。

def getdata():datalist = []baseurl = '/text/page/'for i in range(10):url = baseurl + str(i+1)html = askurl(url)soup = BeautifulSoup(html, 'html.parser')for item in soup.find_all('div', {'class':'article block untagged mb15 typs_hot'}):item = str(item)name = FindName.findall(item)[0]name = name.replace('\n', '')content = FindContent.findall(item)[0]content = content.replace('\n\n\n', '')content = content.replace('<br/>', '\n')datalist.append([name, content])return datalist

5、写到这里是不是都要麻了,现在我们想要的数据我们提取到了,我们来保存一下,定义一个savedata函数

def savedata(savepath):datalist = getdata()with codecs.open(savepath, 'w', 'utf-8') as file:for i in range(len(datalist)):file.write('用户'+str(i+1)+'是 --> ')file.write(datalist[i][0])file.write('\n')file.write('段子 --> ')file.write(datalist[i][1])file.write('\n')

写到这里,我们的第三个需求写完了

现在我们来整理一下,我们利用爬虫爬取了,天气情况,疫情情况,和糗事搞笑段子,现在是不是差发送了,但是我想了想,光发送这些是不是太单调了,学计算机程序员也是会懂得浪漫和爱情的,哈哈哈,所有我们来调整一下吧!来吧开整

如果觉得《Python自动化爬取天气预报 疫情 糗事 通过企业微信发送给男女朋友》对你有帮助,请点赞、收藏,并留下你的观点哦!

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