Python50行代码实现每日鸡汤和天气预报推送,实现邮件发送

每天学习一点,进步一点,强大一点!

(1)实现爬取爱词霸网站的每日一句

爱词霸开源接口http://open.iciba.com/dsapi/

可以先点击上去看看,爱词霸的每日一句包括了英文版和中文版。我们将有用的东西爬取下来,就将这个功能封装成了一个函数,方便调用。以下是代码

import json
import requests
# 爬取爱词霸每日鸡汤
def get_iciba_everyday_chicken_soup():
    url = 'http://open.iciba.com/dsapi/'  # 词霸免费开放的jsonAPI接口
    r = requests.get(url)
    all_content = json.loads(r.text)  # 获取到json格式的内容,内容很多,json.loads: 将str转成dict
    English = all_content['content']  # 提取json中的英文鸡汤
    Chinese = all_content['note']  # 提取json中的中文鸡汤
    everyday_soup = English + '\n' + Chinese  # 合并需要的字符串内容
    return everyday_soup  # 返回结果

print(get_iciba_everyday_chicken_soup())

"""
结果:
It's so easy to be careless, but it takes curse and courage to take cares.  
想要不在乎太容易了,但要有无穷的勇气才能学会在乎。
"""

(2)爬取天气预报网站的天气情况

天气网站https://www.tianqi.com/

同理,我们将有用的东西爬取下来,就将这个功能封装成了一个函数,方便调用。以下是代码疑问点是如何获取请求头

import urllib.request  # 需要安装 urllib 库
from bs4 import BeautifulSoup  # 需要安装 bs4 库


def get_weather(city_pinyin):
    # 声明请求头,模拟真人操作,防止被反爬虫发现
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}
    # 通过传入的城市名拼音参数来拼接出该城市的天气预报的网页地址
    website = "https://www.tianqi.com/" + city_pinyin + "/"
    req = urllib.request.Request(url=website, headers=header)
    page = urllib.request.urlopen(req)
    html = page.read()
    soup = BeautifulSoup(html.decode("utf-8"), "html.parser")
    # html.parser表示解析使用的解析器
    nodes = soup.find_all('dd')
    tody_weather = [node.text.strip() for node in nodes]  # 定义一个列表,并遍历nodes
    tody_weather[0] = tody_weather[0][:2] #去除多余字符
    # 去除字符串中的空行:
    tianqi = " ".join([s for s in tody_weather if s.strip("\n")])
    return tianqi  # 返回结果


# 调用封装号好的函数获取天气预报,参数‘tianjin’是天津的拼音:
print(get_weather("tianjin"))
# 想查询哪个城市的天气情况,直接将参数替换为它的拼音即可

"""
结果:
天津 2020年07月24日 星期五 庚子年六月初四 37℃
晴24 ~ 37℃ 湿度:30%风向:西北风 2级紫外线:很强 空气质量:优PM: 35日出: 05:04日落: 19:30
"""

获取请求头

我用的是谷歌浏览器,其它浏览器同理,拷出来的东西整理一下,对照上面请求头的格式填进去即可
在这里插入图片描述

(3)邮件发送

直接上代码,难点是获取qq邮箱的授权码和SMTP server
获取QQ邮箱的授权码和SMTP server请点击https://blog.csdn.net/chl183/article/details/107568488

import yagmail

args = {
    "user": "1273xxxxxx@qq.com",  # 发邮件账号
    "password": "bkpdgqXXXXXXXXXXXXX",  # 发件账号对应的密码(QQ使用的是授权码,而不是QQ密码)
    "host": "smtp.qq.com",  # 邮件账号的SMTP服务器,默认不用管
    "port": "465"  # SMTP服务器端口 465,默认不用管
}
# 收件人列表
emailList = ["183xxxxxxx@163.com"]
# 主题
subject1 = "天气及每日鸡汤"
# 内容,调用获取天气和每日鸡汤的方法,也可以自己自定义内容
contents1 = get_weather("tianjin") + "\n" + get_iciba_everyday_chicken_soup()
# 实例化发送者
email = yagmail.SMTP(**args)
# 调用消息发送函数,参数分别是:to=收件人列表,subject 邮件标题,contents 邮件正文,cc 邮件抄送人,抄送人可以不选
# email.send(to=emailList,subject="My name is tom",contents="Today is 20190724",cc="jsh******@sina.com")
email.send(to=emailList, subject=subject1, contents=contents1)

(4)获取每日一句、天气、及发邮件完整代码

只需改一下发件人、QQ授权码、收件人列表即可
感兴趣的还可以写bat文件脚本,添加到计算机的定时任务上,这样就可以定时发邮件了

import json
import requests
import urllib.request  # 需要安装 urllib 库
from bs4 import BeautifulSoup  # 需要安装 bs4 库
import yagmail

# 爬取爱词霸每日鸡汤
def get_iciba_everyday_chicken_soup():
    url = 'http://open.iciba.com/dsapi/'  # 词霸免费开放的jsonAPI接口
    r = requests.get(url)
    all = json.loads(r.text)  # 获取到json格式的内容,内容很多
    English = all['content']  # 提取json中的英文鸡汤
    Chinese = all['note']  # 提取json中的中文鸡汤
    everyday_soup = English + '\n' + Chinese  # 合并需要的字符串内容
    return everyday_soup  # 返回结果

def get_weather(city_pinyin):
    # 声明头,模拟真人操作,防止被反爬虫发现
    header = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}
    # 通过传入的城市名拼音参数来拼接出该城市的天气预报的网页地址
    website = "https://www.tianqi.com/" + city_pinyin + "/"
    req = urllib.request.Request(url=website, headers=header)
    page = urllib.request.urlopen(req)
    html = page.read()
    soup = BeautifulSoup(html.decode("utf-8"), "html.parser")
    # html.parser表示解析使用的解析器
    nodes = soup.find_all('dd')
    tody_weather = [node.text.strip() for node in nodes]  # 定义一个列表,并遍历
    tody_weather[0] = tody_weather[0][:2]
    # 去除字符串中的空行:
    tianqi = " ".join([s for s in tody_weather if s.strip("\n")])
    return tianqi  # 返回结果

# 调用封装号好的函数获取天气预报,参数‘tianjin’是重庆的拼音:
# print(get_weather("tianjin"))
# 想查询哪个城市的天气情况,直接将参数替换为它的拼音即可

args = {
    "user": "1273xxxxxx@qq.com",  # 发邮件账号
    "password": "bkpdgqXXXXXXXXXXXXX",  # 发件账号对应的密码(QQ使用的是授权码,而不是QQ密码)
    "host": "smtp.qq.com",  # 邮件账号的SMTP服务器,默认不用管
    "port": "465"  # SMTP服务器端口 465,默认不用管
}
# 收件人列表
emailList = ["183xxxxxxx@163.com"]
# 主题
subject = "天气及每日鸡汤"
# 内容,调用获取天气和每日鸡汤的方法,也可以自己自定义内容
contents = get_weather("tianjin") + "\n" + get_iciba_everyday_chicken_soup()
# 实例化发送者
email = yagmail.SMTP(**args)
# 调用消息发送函数,参数分别是:to=收件人列表,subject 邮件标题,contents 邮件正文,cc 邮件抄送人
# email.send(to=emailList,subject="My name is tom",contents="Today is 20190724",cc="jsh******@sina.com")
email.send(to=emailList, subject=subject, contents=contents)

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值