python微信公众号自动推送(十分简单的教程)
一、注册微信公众号
1.注册链接
2.登录成功
登录成功后会自动生成你的appid和appsecret(后面会用到) 接口信息等暂时不用管若后期想完全实现自动推送则需要挂自己的服务器(后续会更新)
4.创建模板
创建模板时既可以将所有的 文本文字+数据 放在一起当作数据像这样
也可以再模板内先写出来,但是这种方法会让模板的灵活性变小做大的修改只能重新创建新的模板
二、代码实现
首先了解以下的几个库
import requests import json import datetime import time from bs4 import BeautifulSoup from zhdate import ZhDate #用到的库
1.爬取天气信息
def get_weather(self):
"""
该方法中用到了beautifulsoup的一些基本用法
感兴趣可以深入了解python爬虫
"""
url = http://www.weather.com.cn/weather/101290101.shtml #昆明天气网站
sysdate = datetime.date.today()
r = requests.get(url, timeout=30) # 用requests抓取网页
r.raise_for_status() # 异常时停止
r.encoding = r.apparent_encoding # 编码格式
html = r.text
final_list = []
soup = BeautifulSoup(html, html.parser) # 用BeautifulSoup库解析网页
body = soup.body # 从soup里截取body的一部分
data = body.find(div, {id: 7d}) #在网页浏览器按F12遍历div 找到 id = 7d
#的对应标签 会发现七天的天气信息都包括在子节点中
ul = data.find(ul) #用find方法找ul标签
lis = ul.find_all(li) #找到ul中的li标签也就是列表其中存放着 日期 天气 风力等信息
for day in lis:
temp_list = []
date = day.find(h1).string # 找到日期
if date.string.split(日)[0] == str(sysdate.day):
temp_list = []
date = day.find(h1).string # 找到日期
temp_list.append(date)
info = day.find_all(p) # 找到所有的p标签
temp_list.append(info[0].string)
if info[1].find(span) is None: # 找到p标签中的第二个值span标签——最高温度
temperature_highest = # 用一个判断是否有最高温度
else:
temperature_highest = info[1].find(span).string
temperature_highest = temperature_highest.replace(℃, )
if info[1].find(i) is None: # 找到p标签中的第二个值i标签——最高温度
temperature_lowest = # 用一个判断是否有最低温度
else:
temperature_lowest = info[1].find(i).string
temperature_lowest = temperature_lowest.replace(℃, )
temp_list.append(temperature_highest) # 将最高气温添加到temp_list中
temp_list.append(temperature_lowest) # 将最低气温添加到temp_list中
final_list.append(temp_list) # 将temp_list列表添加到final_list列表中
return 天气情况: + final_list[0][1] +
温度: + final_list[0][3].strip() + ~ +
final_list[0][2].strip() + ℃
2.计算生日天数
def get_herbirthday(self):
"""
获取npy生日 这里还用到了农历时间库
可以去网上查阅 ZhDate库 其他基本上是datetime中的一些获取当前日期和toordinal
没什么特别难的
"""
today = datetime.datetime.now() #获取现在时间信息
data_str = today.strftime(%Y-%m-%d)
herbirthDay = ZhDate(today.year, 1, 18).to_datetime() #将农历1.18号的时间转换为公历时间再转换为datetime类型的时间
if herbirthDay >today : #如果ta的生日日期比今天靠后则直接计算这两天的序号之差
difference = herbirthDay.toordinal() - today.toordinal()
return ("
距离熊又又生日,还有 %d 天。" % (difference))
elif herbirthDay <today: #如果ta的生日日期比今天靠前则给ta的生日加上一年再计算这两天的序号之差
herbirthDay = herbirthDay.replace(today.year+1)
difference = herbirthDay.toordinal() - today.toordinal()
return ("
距离熊又又生日,还有 %d 天。" % (difference))
else:
return (生日快乐bb!!)
3.获取access token
获取open id的https请求方式为
5.向用户广播消息
http请求方式:
6.最终代码
代码还有很多需要改进的地方
大佬轻喷!!!
