python实现给你女朋友发天气预报和情话

今天说一下如何用python给你女朋友发天气预报和情话,让她明白程序员也有浪漫

在这里插入图片描述

整体思路:

  • 上网爬取天气信息
  • 上网爬取情话
  • 发邮件
  • 实现定时发邮件

需要用到的模块:

  • requests:用于向网站发送请求
  • yagmail:用法发邮件
  • schedule:用于实现定时任务
  • BeautifulSoup:处理网页标签
  • re:正则过滤

天气获取的url:https://tianqi.2345.com/。这个是默认的,为了省去一写麻烦我直接在首页点到对应的城市,最终链接如下:https://tianqi.2345.com/cixian1d/70177.htm,你们可以改成你们女朋友城市的链接。

我获取情话的url地址是:https://www.guaze.com/juzi/23389.html。当然,你们也可以自定义一些情话使用random随机发送

首先我们需要导入对应的模块:
先做第一步,上网爬取天气信息

import requests
from bs4 import BeautifulSoup

url = 'https://tianqi.2345.com/cixian1d/70177.htm'

在这里插入图片描述
经过分析我们找到了我们要取的标签内容所在位置

接下来我们开始爬取:

web = requests.get(url)   # 对网页进行get请求
# print(web.text)
page = BeautifulSoup(web.text,'html.parser')   # 将get下来的网页内容交给BeautifulSoup处理,并指定解释器为html

weather = page.find('div',class_='real-today')   # 搜索我们要获取的span标签内容上面的div标签,指定它的class name为real-today。这个可以在上图看到div后面有class,后面引号内的内容就是它的class name

print(weather.text)

执行结果如下:
今天:24-31° 阵雨转阴

到这第一步爬取天气就完成了,是不是很简单.

在这里插入图片描述

接下来我们开始第二部,爬取情话

此步还需再导入一个re模块

import re

loveurl = 'https://www.guaze.com/juzi/23389.html'

web2 = requests.get(loveurl)
web2.encoding='gb2312'           # 此处需要对网站指定一个编码格式
 
# print(web2.text)
page = BeautifulSoup(web2.text, "html.parser")
div = page.find('div', class_="content")
print(div.text)
# 和上面套路相同

执行结果如下:(太多,所以只展示了部分)
1、人总是贪婪的,就像最开始我只想知道你的名字。
2、海上月是天上月,眼前人是心上人。——张爱玲
3、你知道我的缺点是什么吗?是缺点你
4、我昨天晚上梦到你了,梦里面我很爱你,对于我来说,梦是虚假的,但爱你是真的。

5、想做那个只喜欢你,也只被你喜欢的人
6、这么多的路,到底哪一条才能到你心里
7、遇见你我变得很低很低,一直低到尘埃里去.但我的心是欢喜的,在那里开出一朵花来。——张爱玲

可以看到跟明显的缺陷,就是有空行,所以我们需要稍加处理

div = str(div.text)         # 转换上面获取到的内容格式为字符串
grep = re.compile(r"\d+、(.*)")      # re过滤格式为 数字、任意内容,将空行排除
content = grep.findall(div)         # 指定要过滤的内容为div,并返回个列表
print(content[1])                  # 打印列表内下标为1的内容

结果如下:
海上月是天上月,眼前人是心上人。——张爱玲

到这第二步也完成了,剩下就剩下定时发邮件了

导入模块:

	import yagmail   # 此模块用于发邮件
	import schedule  # 此模块用于计划任务

    yag = yagmail.SMTP(
        host='smtp.qq.com', user='你的邮箱',   # 如过用的是qq邮箱就写smtp.qq.com,如果是163就写smtp.163.com
        password='授权码', smtp_ssl=True       # 授权码在qq邮箱里开启smtp就会生成一个
    )
    weather = [weather.text,"每日情话:",content[ran],    # 定义发送内容
               yagmail.inline(r"./love.jpg")    # 附件图片,不发图片可以删掉
               ]
    yag.send(
        to=['要发送到的邮箱地址'],
        subject='天气预报',           # 邮件主题
        contents=weather          # 发送的内容为上面定义的weather,其中weather.text是天气预报,content[ran]是情话
    )

完整代码:

import requests
import yagmail   # 此模块用于发邮件
import schedule  # 此模块用于计划任务
from bs4 import BeautifulSoup
import re

ran = 0
url = 'https://tianqi.2345.com/cixian1d/70177.htm'  # 定义天气预报的url
loveurl = 'https://www.guaze.com/juzi/23389.html'  # 定义情话的url
def email():
    global ran      # 将ran变量声明为全局变量
    web = requests.get(url)
    # print(web.text)

    page = BeautifulSoup(web.text,"html.parser")

    # print(ran)

    # print(love[ran])

    weather = page.find("div",class_="real-today")
    # print(weather.text)

    web2 = requests.get(loveurl)
    web2.encoding = 'gb2312'
    page = BeautifulSoup(web2.text, "html.parser")

    div = page.find('div', class_="content")

    div = str(div.text)
    # print(div)
    grep = re.compile(r"\d+、(.*)")
    content = grep.findall(div)
    # print(content)


# email函数内的内容是爬取天气和情话的,具体的地址天气你可以更换url

    yag = yagmail.SMTP(
        host='smtp.qq.com', user='你的邮箱',   # 如过用的是qq邮箱就写smtp.qq.com,如果是163就写smtp.163.com
        password='授权码', smtp_ssl=True       # 授权码在qq邮箱里开启smtp就会生成一个
    )
    weather = [weather.text,"每日情话:",content[ran],    # 定义发送内容
               yagmail.inline(r"./love.jpg")    # 附件图片,不发图片可以删掉
               ]
    yag.send(
        to=['要发送到的邮箱地址'],
        subject='天气预报',           # 邮件主题
        contents=weather          # 发送的内容为上面定义的weather,其中weather.text是天气预报,content[ran]是情话
    )
    print("发送完成")
    ran += 1

schedule.every().day.at("05:21").do(email)      # 每天5点21分执行函数email0
# schedule.every(10).seconds.do(email)  #每10秒执行一下函数email的内容,我这里用于测试
while True:
    schedule.run_pending()

其中ran变量用于取情话列表内的内容,每发一次加1,以此来让每次发的情话都不一样

效果如下:(我这里设置的是每天凌晨5:21发送,你可以根据需求改,图片也是)快给你女朋友安利起来吧!
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值