爬取游戏优惠信息,并且将结果发送到邮箱

需求分析

昨天,我制作了爬取游戏优惠信息的程序,很快啊,一个朋友私信我说,你这个没用。这个话好像很耳熟啊,前两天就有朋友说我这个没用,主要因为是当时爬到的内容是外文的,看不懂,现在这个问题已经解决了,都是中文的了,怎么还没有用呢?

这个朋友说,“你这个优惠信息啊,网站上都有,我直接上网站上看一下不就行了吗,为什么还需要你这个爬虫程序呢?完全不能够理解啊,这有什么区别呢?”

我说,“这个程序啊,可以监测游戏价格,如果游戏价格没有变化,那么就不发送通知,如果游戏价格优惠了,就发送通知,这就避免了我们每天去网站上查看价格了,这个有用吧?”

他一听,诶,有点心动,但是呢,他还是不是很理解,“发送价格通知,这个功能要怎么做呢?”

本期,我们将制作将爬取到的数据内容发送到邮箱的程序

发送邮件

传统的发送邮件的方式,在菜鸟教程上已经写的很清楚了,使用上边的方法,就可以完成邮件的发送,而且使用的都是python的内置库

其中需要注意的是,如果我们自己没有邮件服务器,就需要使用第三方邮件的服务器,比如通过qq邮箱进行邮件的发送

import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
# 使用SMTP的服务
mail_host = ""  # 服务器
mail_user = ""  # 用户名
mail_pass = ""  # 密钥
 

sender = ""  # 发送者
receivers = [""]  # 接收方
 
message = MIMEText("邮件信息", "plain", "utf-8")
message["From"] = Header("发送者", "utf-8")
message["To"] =  Header("接受者", "utf-8")
 
subject = "标题内容"
message['Subject'] = Header(subject, "utf-8")
 
 
try:
    smtpObj = smtplib.SMTP() 
    smtpObj.connect(mail_host, 25)    # 如果端口号不是25,要根据实际内容来使用
    smtpObj.login(mail_user,mail_pass)  
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("邮件发送成功")
except smtplib.SMTPException as e:
    print("错误,邮件发送失败")
    raise

传统的邮件发送,需要实现的代码部分还是比较多的,可能会比较麻烦,容易出错。这也不要紧,现在还有大佬完成好的封装程度很高的yagmail库可以使用,使用yagmail就可以更容易的发送邮件了

如果你还不知道这个,可以前往yagmail库的github地址进行下载和学习

使用方法也是非常的简单,通过这样一个简单的案例,就可以简单的进行使用了

import yagmail 

# user处填写用户名
# password处填写密钥
# host处填写邮件服务地址
yag = yagmail.SMTP(user="", password="", host="", encoding="utf-8")

# 要发送的内容之所以是一个列表
# 是因为后边还可以加上要携带发送的附件,例如图片或者音频等
# 如果你不要发送其他的,可以只放正文内容
content = ["要发送的内容"]

yag.send("接收方的邮件地址", "标题内容", content)

可以看到,比起传统方法,明显是容易了许多,这也要感谢yagmail作者的贡献,谢谢!

完整代码实现

import requests
import base64
import yagmail
from lxml import etree
 
user = ""
password = ""
host = ""
receiver = ""

base_url = "aHR0cHM6Ly9zdG9yZS5zdGVhbWNoaW5hLmNvbS9zZWFyY2gvP3NwZWNpYWxzPTE="
url = base64.b64decode(base_url).decode()
 
headers = {"user-agent": "Mozilla/5.0"}
 
r = requests.get(url, headers=headers)
 
html = etree.HTML(r.text)
 
div = html.xpath("//div[@class='responsive_search_name_combined']")
 
text = ""
 
for i in div:
    title = i.xpath(".//span[@class='title']/text()")[0]
    if not len(i.xpath(".//div[@class='col search_discount responsive_secondrow']/span/text()")):
        continue
    text += "游戏名:"
    text += title
    text += "\n"
    discount = i.xpath(".//div[@class='col search_discount responsive_secondrow']/span/text()")[0]
    text += "折扣:"
    text += discount
    text += "\n"
    price = i.xpath(".//div[@class='col search_price discounted responsive_secondrow']/span/strike/text()")[0]
    text += "原价:"
    text += price
    text += "\n"
    new_price = i.xpath(".//div[@class='col search_price discounted responsive_secondrow']/text()")[1]
    text += "现价:"
    text += new_price
    text += "\n"
 
yag = yagmail.SMTP(user=user, password=password, host=host, encoding="utf-8")
yag.send(receiver, "新一期的游戏优惠信息", [text])

注意,以上的完整代码也是不可以直接运行的,必须按照文章中的说明,配置好你自己的账号服务信息以后,才能够使用该程序

由于使用的邮件服务的不同,可能会遇到一些问题,可以尝试解决,或者直接使用其他家可用的邮件服务

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值