前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】新闻邮件通知实现

【Python】新闻邮件通知实现

作者头像
公众号---人生代码
发布2019-07-24 14:42:47
6140
发布2019-07-24 14:42:47
举报
文章被收录于专栏:人生代码

【Python】新闻邮件通知实现

结合之前学到的网络爬虫和发送电子邮件的知识,实现一个功能服务。本文用python代码实现,从某新闻网站爬取一个头条新闻,提取标题和url链接,然后把这些信息整合发送到指定邮箱上。

主模块:控制整体流程

代码语言:javascript
复制
from crawl_info import get_info
from send_mail import send_mail

if __name__ == '__main__':  #服务程序的入口
    crawl_url = "https://news.sina.com.cn/" # 新浪网首页
    content = get_info(crawl_url)       #爬取信息
    send_mail(content)          #发送短信

crawl_info模块:获取关键内容

代码语言:javascript
复制
#封装网络获取的信息
import requests
from bs4 import BeautifulSoup
import re


#解决网页编码问题
def getUrlCoding(data):  
    charset = 'utf-8'
    if data.encoding.lower() == 'utf-8' or data.encoding == 'utf8':
        return 'utf-8'
    if data.encoding.lower() == 'gb2312':
        return 'gb2312'
    if data.encoding.lower() == 'gbk':
        return 'gbk'
    if data.encoding.lower() == 'gb18030':
        return 'GB18030'
    m = re.compile('<meta .*(http-equiv="?Content-Type"?.*)?charset="?([a-zA-Z0-9_-]+)"?', re.I).search(data.text)
    if m and m.lastindex == 2:
        charset = m.group(2).lower()
    return charset

#获取网页的详细信息
#返回带有新闻地址和新闻标题的字符串
def get_info(url):
    response = requests.get(url)
    if response.status_code == 200:
        response.encoding = getUrlCoding(response)
        soup = BeautifulSoup(response.text, 'lxml')
        big_news = soup.select('#syncad_1 > h1:nth-child(1) > a')[0].get_text() #标题内容
        url = soup.select('#syncad_1 > h1:nth-child(1) > a')[0].get('href')     #获取url
        return "新闻标题:"+big_news+"\n新闻地址:"+url

send_mail模块:发送邮件

代码语言:javascript
复制
#发送邮件到指定的邮箱
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

import smtplib



def _format_addr(s):
    name, addr = parseaddr(s)
    return formataddr((Header(name, 'utf-8').encode(), addr))


def send_mail(text):
    #配置信息以环境变量的形式保存
    user_mail = '你本人的邮箱地址'
    password = '你的邮箱密码'
    send_mail = '收件人的邮箱地址'
    smtp_server = '你所在邮箱的smtp服务器地址'

    #填写邮件的正文、发件人信息、收件人信息、主题...
    msg = MIMEText(text, 'plain', 'utf-8')  
    msg['From'] = _format_addr('XX 大新闻 <%s>' % user_mail)
    msg['To'] = _format_addr('收件人 <%s>' % send_mail)
    msg['Subject'] = Header('xx新闻提醒', 'utf-8').encode()

    #发出邮件要执行的动作
    server = smtplib.SMTP(smtp_server, 25)  #执行邮局服务器的25端口
    server.set_debuglevel(1)        #
    server.login(user_mail, password)   #登录服务器
    server.sendmail(user_mail, [send_mail], msg.as_string()) #发送信件到指定的地址
    server.quit()   #结束服务

运行

实现

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CryptoCode 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【Python】新闻邮件通知实现
  • 主模块:控制整体流程
  • crawl_info模块:获取关键内容
  • send_mail模块:发送邮件
  • 运行
  • 实现
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档