请务必每天早上8点将前十条科技要闻发给三爷(代码片段)

mikasama mikasama     2022-12-31     286

关键词:

需求:

1、获取前十条科技要闻

2、通过邮件发送给指定收件人

3、定时发送

 

1、获取要闻,选的是新浪科技网https://tech.sina.com.cn/,爬取前十名要闻

import requests
from requests import exceptions
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re

# 获取前十条科技新闻
def get_tech_news():
    # 获取网页文本
    resp = urlopen(https://tech.sina.com.cn/)
    # 使用爬虫工具BeautifulSoup查找需要的文本内容
    soup = BeautifulSoup(resp, html.parser)
    news = soup.find(ul, class_=rank-con)
    news_list = []
    for new in news:
        if len(new.string) > 5:
            news_list.append(new.string.replace( , ))
    # 组装邮件文本,<br>换行
    news_contents = f‘‘‘
    今日科技要闻<br>
    1、news_list[0]<br>
    2、news_list[1]<br>
    3、news_list[2]<br>
    4、news_list[3]<br>
    5、news_list[4]<br>
    6、news_list[5]<br>
    7、news_list[6]<br>
    8、news_list[7]<br>
    9、news_list[8]<br>
    10、news_list[9]<br>
    详情,请进入https://tech.sina.com.cn 查看
    ‘‘‘.replace(	, ‘‘)
    print(news_contents)
    send_email("今日科技要闻", news_contents)

 

2、定义发送邮件函数,跟上次一样,同级目录需要config.yml配置文件

# config.yml配置文件
email:
    sender: [email protected]
    receiver: [email protected]
    smtpserver: smtp.163.com
    username: mikasama007
    password: 邮箱密码
import time
import yaml
import smtplib
import sys
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.header import Header


def get_conf():
    with open ("config.yml", "r", encoding=utf-8) as f:
        cfg = f.read()
        dic = yaml.load(cfg)
        # print(type(dic))
        # print(dic)
        sender = dic[email][sender]
        receiver = dic[email][receiver]
        smtpserver = dic[email][smtpserver]
        username = dic[email][username]
        password = dic[email][password]
        # print(sender, receiver, smtpserver, username, password)
        return sender, receiver, smtpserver, username, password

def send_email(title, text):
    today = time.strftime(%Y.%m.%d,time.localtime(time.time()))
    sender, receiver, smtpserver, username, password = get_conf()
    # subject为邮件主题 text为邮件正文
    subject = ":".format(title, today)
    msg = MIMEText(text, html, utf-8)
    msg[Subject] = subject
    msg[From] = sender
    msg[To] = "".join(receiver)
    # smtp = smtplib.SMTP()
    # smtp.connect(smtpserver)
    # 变量名不能为stmp,改为server
    # windows上端口为25,linux上使用SMTP_SSL
    # server = smtplib.SMTP(smtpserver, 25)
    # https://blog.csdn.net/zekdot/article/details/81013176
    server = smtplib.SMTP_SSL(smtpserver, 465)
    server.set_debuglevel(0)
    server.login(username, password)
    server.sendmail(sender, receiver, msg.as_string())
    server.quit()

3、引入schedule库,定时发送邮件

import schedule

# 每天早上8点发送邮件通知
schedule.every().day.at("08:00").do(do_all_get_tech_news)

# 确保schedule一直运行
while True:
    schedule.run_pending()
    time.sleep(1)

4、丢服务器上去

运行python send_news.py

居然发不了邮件?换个地方就不行?

将登陆模式改为SSL即可:

server = smtplib.SMTP_SSL(smtpserver, 465)

修改后,可以正常发送邮件,cool!

但是这样可不行,ssh连接关闭,程序肯定会退出的,我们需要后台运行:

nohup python send_news.py &

查看下:

 

# root @ www in /home/cool_things/send_news [23:06:35] C:1
$ nohup python send_news.py &
[1] 24713

# root @ www in /home/cool_things/send_news [23:06:45] 
$ nohup: ignoring input and appending output to ‘nohup.out’


# root @ www in /home/cool_things/send_news [23:06:50] 
$ ps -ef | grep python
root       724     1  0 Apr01 ?        00:25:52 /usr/bin/python -Es /usr/sbin/tuned -l -P
root     10357     1  0 Apr01 ?        00:03:20 /usr/bin/python -Es /usr/sbin/firewalld
root     23391     1  0 Sep01 ?        00:10:10 python send_msg_to_wx.py
root     24713 21231  1 23:06 pts/1    00:00:00 python send_news.py

# root @ www in /home/cool_things/send_news [23:06:58] 
$ ps -ef | grep send_news
root     24713 21231  0 23:06 pts/1    00:00:00 python send_news.py

搞定,程序已经在后台运行,从明天开始,三爷每天早上8点就能收到每日要闻邮件了。

全部代码:

技术分享图片
# !/usr/bin/env python
# -*- coding:utf-8 -*-

import requests
from requests import exceptions
from urllib.request import urlopen
from bs4 import BeautifulSoup
import re
import schedule
import time
import yaml
import smtplib
import sys
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.header import Header


def get_conf():
    with open ("config.yml", "r", encoding=utf-8) as f:
        cfg = f.read()
        dic = yaml.load(cfg)
        # print(type(dic))
        # print(dic)
        sender = dic[email][sender]
        receiver = dic[email][receiver]
        smtpserver = dic[email][smtpserver]
        username = dic[email][username]
        password = dic[email][password]
        # print(sender, receiver, smtpserver, username, password)
        return sender, receiver, smtpserver, username, password

def send_email(title, text):
    today = time.strftime(%Y.%m.%d,time.localtime(time.time()))
    sender, receiver, smtpserver, username, password = get_conf()
    # subject为邮件主题 text为邮件正文
    subject = ":".format(title, today)
    msg = MIMEText(text, html, utf-8)
    msg[Subject] = subject
    msg[From] = sender
    msg[To] = "".join(receiver)
    # smtp = smtplib.SMTP()
    # smtp.connect(smtpserver)
    # 变量名不能为stmp,改为server
    # windows上端口为25,linux上使用SMTP_SSL
    # server = smtplib.SMTP(smtpserver, 25)
    # https://blog.csdn.net/zekdot/article/details/81013176
    server = smtplib.SMTP_SSL(smtpserver, 465)
    server.set_debuglevel(0)
    server.login(username, password)
    server.sendmail(sender, receiver, msg.as_string())
    server.quit()

# 获取前十条科技新闻
def get_tech_news():
    # 获取网页文本
    resp = urlopen(https://tech.sina.com.cn/)
    # 使用爬虫工具BeautifulSoup查找需要的文本内容
    soup = BeautifulSoup(resp, html.parser)
    news = soup.find(ul, class_=rank-con)
    news_list = []
    for new in news:
        if len(new.string) > 5:
            news_list.append(new.string.replace( , ))
    # 组装邮件文本,<br>换行
    news_contents = f‘‘‘
    今日科技要闻<br>
    1、news_list[0]<br>
    2、news_list[1]<br>
    3、news_list[2]<br>
    4、news_list[3]<br>
    5、news_list[4]<br>
    6、news_list[5]<br>
    7、news_list[6]<br>
    8、news_list[7]<br>
    9、news_list[8]<br>
    10、news_list[9]<br>
    详情,请进入https://tech.sina.com.cn 查看
    ‘‘‘.replace(	, ‘‘)
    print(news_contents)
    send_email("今日科技要闻", news_contents)

# 调试
news = get_tech_news()

def do_all_get_tech_news():
    try:
        get_tech_news()
    except exceptions as e:
        print(e)
        time.sleep(10)
        get_tech_news()

# 每天早上8点发送邮件通知
schedule.every().day.at("08:16").do(do_all_get_tech_news)

# 确保schedule一直运行
while True:
    schedule.run_pending()
    time.sleep(1)
View Code

 

sqlserver查询出前十条,发布时间前十天内的记录

sqlserver查询出前十条,发布时间前三十天内的记录selecttop10*fromPPst_Newswheredatediff(day,AddTime,dateadd(day,-3,convert(varchar(20),getdate(),120)))<10要想查询今天起前三十天内发布的记录,可用以上方法写查询。参考技术Aselecttop10*fromDatabasewhere... 查看详情

若依框架以及mybatis-plus分页插件失效,数据库有多条却只查前十条(代码片段)

        最近在若依的基础上开发,因为若依自带分页所以一直就没考虑数据分页,最近发现数据库明明有数据,却只能查出前10条。 首先分析原因,我是在原来代码的基础上,重新封装了vo类返回给前端&... 查看详情

求解:db2数据库表tab中无id,且数据量较大,如何指定查询中间十条数据,不是前十条,谢了。

参考技术Aselect*from表名where条件语句fetchfirst10only这是前10行的select*from(select字段,row_number()over()asrnwhere***oderby****)astmpwherern>50andrn<=100这是50至100行追问DB2中没有row_number()函数,麻烦确定后再回答,谢谢。追答没有row_number()函... 查看详情

每天早上开始代码场景之前激活插件功能(Ionic-Cordova)

】每天早上开始代码场景之前激活插件功能(Ionic-Cordova)【英文标题】:Activatepluginfunctioneverymorningbeforebeginingcodescenario(Ionic-Cordova)【发布时间】:2021-11-0823:44:58【问题描述】:我在Android设备(信息亭)上使用ioniccordova,我必须... 查看详情

在plsql中怎么能取到表中按id降序排列的前十条记录???

参考技术A在PLSQL中怎么能取到表中按ID降序排列的前十条记录的sql语句是:selectrownum,t.*from(select*fromtestorderbyiddesc)twhererownum<11;PLSQL是连接的oracle数据库,oracle中没有limit(limit是mysql中的用法)、top(top是sqlserver)关键字,oracle... 查看详情

本地通知“每天早上 7:00”未通知

】本地通知“每天早上7:00”未通知【英文标题】:LocalNotification"Everydayat7:00am"notnotifying【发布时间】:2012-11-0819:21:20【问题描述】:我希望每天7:00发出通知,但它不会发出。我也希望它显示在锁定屏幕中。这是我到目前... 查看详情

早上忘记贴了qaq

ww我拿什么成绩来回报你伪800题去年圣诞节的flag!QAAAQ!想贴的时候适逢bzoj又炸了><心情再次复杂这段时间每天傍晚都能在学校广播听到林俊杰的声音~所以就会在教室里多待一会儿因为科技楼隔音效果实在太好了。。。  查看详情

xcode - 定时本地通知(每天早上 6 点)

】xcode-定时本地通知(每天早上6点)【英文标题】:xcode-scheduledlocalnotificationwithtime(Everydayat6AM)【发布时间】:2012-04-2208:18:13【问题描述】:我使用的是Xcode4.3.2,如何设置每天早上6点的本地通知“dateToFire”?-(void)notificationUILoca... 查看详情

安排每天运行 2 次的任务 [重复]

】安排每天运行2次的任务[重复]【英文标题】:ScheduleaTaskwhichruns2timesaday[duplicate]【发布时间】:2019-11-2520:18:40【问题描述】:我想开发一个工具,可以每天2次删除文件夹的所有文件-早上和晚上8:30。它应该只永久删除所有文件... 查看详情

如何使用python让某段程序固定在每天早上八点钟开始运行

...用Python,怎样才能让一段程序,例如函数spider()固定在每天的早上八点运行一次,晚上八点再运行一次,每天运行两次。万分感谢啦windous下的你在windows下根本不用这么麻烦:首先,比如你的程序名字是test.py如果你想调用某个具... 查看详情

我在 .Net 中构建啥来每天早上自动生成一个文件? [复制]

】我在.Net中构建啥来每天早上自动生成一个文件?[复制]【英文标题】:WhatdoIbuildin.Nettoautomaticallygenerateafileeverymorning?[duplicate]我在.Net中构建什么来每天早上自动生成一个文件?[复制]【发布时间】:2018-08-0920:56:37【问题描述】... 查看详情

crontab模式0 8是啥意思

...可以为您提供帮助。找到答案thanx【参考方案1】:意思是每天早上8: 查看详情

[网络流24题]餐巾计划问题(代码片段)

...巾,传出脏餐巾。晚上接收脏餐巾,传出干净餐巾。1、每天早上可以买任意数量的新餐巾(从源点连到i,容量为INF)2、每天早上传出需要使用数量的脏餐巾(从点i连到汇点,容量为need[i],费用为0)3、每天晚上肯定有固定量... 查看详情

订购本专栏请务必清楚这几点(代码片段)

这个专栏大家不用花钱!!!我也当作团支书!我也知道每周催青年大学习的痛苦!!之所以设置成付费是不想让别人转载!!所有的代码都在GitHub上!!!GitHub链接现有的省份的视频... 查看详情

发送预定消息

...它在我的服务器上的特定时间发送每日消息,例如,我想每天早上8点向频道发送一条消息,说“早安”。我该怎么做?目前,我只有这段代码 查看详情

需要每天早上 9 点跑步,并且每 10 秒保持一次跑步

】需要每天早上9点跑步,并且每10秒保持一次跑步【英文标题】:Needtorunasheverydayat9amandkeeprunningevery10secs【发布时间】:2020-06-2103:54:23【问题描述】:我正在编写一个覆盆子相机所以,我需要每天早上9点执行一个sh脚本,但之后... 查看详情

在本地通知 iOS 上每天在警报正文中设置随机消息的问题

】在本地通知iOS上每天在警报正文中设置随机消息的问题【英文标题】:IssuetosetrandommessageinalertbodyeverydayonlocalnotificationiOS【发布时间】:2014-06-2306:38:25【问题描述】:我使用以下代码在每天上午8:00使用本地通知从myArray(NSArray)生... 查看详情

Java 每天在同一时间向不同时区发送电子邮件

】Java每天在同一时间向不同时区发送电子邮件【英文标题】:JavaSendingEmailtoDifferentTimeZonesAttheSameTimeEachDay【发布时间】:2012-11-2714:25:39【问题描述】:原来这似乎是一个复杂的主题,如果我的方法过于简单,请告诉我。基本上,... 查看详情