python发邮件怎么用服务器每天发_神级程序员的Python爬虫!服务器定时发邮件(知识点全面)...

本文介绍了如何在Ubuntu系统中使用crontab设置定时任务,配合Python爬虫抓取网站热点新闻,并通过邮件发送。首先讲解了crontab的使用方法和定时任务模板,接着介绍了如何配置mutt和msmtp发送邮件,最后展示了结合Python爬虫将抓取的新闻内容写入文件并定时通过邮件发送的流程。
摘要由CSDN通过智能技术生成

很多小伙伴找我问:老铁,这些代码我写的和你一样,为什么我的不行。其实这是最基本的函数,你照葫芦画瓢是没什么多大的作用的。我不会直接告诉你答案也不是我不想告诉你,而是希望你能跟着思路,自己找到答案,这才是真的学会了,掌握了这其中的知识点,下次在遇到就会了,而不是到处去问。如果你还在迷茫,不知道该往哪个方向走,如果你还找不到Python的入门,如果你还在为碰到各种知识点不会而苦恼,那就加小编自己弄的一个交流学习基地吧。大家可以加入交流基地:58937142,里面新手入门资料,可以说从零到项目实战,都是可以免费获取的,还有热心肠的答疑小伙伴为各位免费解答问题,热心肠的小伙伴也是蛮多的。不失为是一个交流的的好地方,小编在这里邀请大家加入我的大家庭。欢迎你的到来。一起交流学习!共同进步!小编等你!

前言

开心做技术

在深入感受到爬虫的乐趣的时候,多想用它干点简单的事情,我非常喜欢浏览某网站的热点新闻,但如果那天学习忙的天花乱缀(chu qu gui hun)的时候,“WC、WC、我错过了什么大事情”,就会错过当时的热点。怎么才能记录下呢!

预期达成效果:

python爬去某网站上的时刻下最热点新闻,存储到文档中。在lunix下定时每隔n小时启用python去爬取新闻,然后用邮件的形式每隔n小时将新闻文档发到自己的邮箱,以便朕统一的查阅。

执行计划:定时执行任务配置【Ubuntu环境下】

发送邮件相关配置

执行脚本编写

python爬虫程序编写

注:一千个人心中有一千个哈姆雷特,一千个人配出一千种错误

1、定时执行任务

在ubuntu相爱使用crontab部署定时任务{使用是linux虚拟机ubuntu。}

cron是一个[守护程序]用于在指定的时间内执行行程类的任务,每一个用户都有一个 crontab 文件,来允许他们指定需要执行的内容和时间,此外,系统也有一个 crontab ,用来允许像交替日志和更新本地数据这样有规则的任务。

插入crontab所需要的知识,只需要看看,了解下后面不明白再来看

服务使用命令:

查看cron的状态

sudo service cron status

开启cron

sudo /etc/init.d/cron start

关闭cron

sudo /etc/init.d/cron stop

重启cron

sudo service cron restart

or重启服务

sudo /etc/init.d/cron restart

查看命令是否运行

pgrep cron

cron设置用法:

crontab -e #设置定时任务crontab -l #查看详情crontab -r : 删除 crontab 文件 不建议手贱去验证他

定时任务的模版样式:

* * * * * command 星星表示通配符 command表示任务

m h dom mon dow command

分 时 日 月 周 命令

m 分钟 0-59第1列表示分钟1~59 每分钟用*或者 */1表示

h 小时 0-23 第2列表示小时1~23(0表示0点)

dow 天1-31 第3列表示日期1~31

mon 月 1-12 第4列表示月份1~12

dow 星期 1-6 0表示星期日第5列标识号星期0~6(0表示星期天)

command 就是要执行的命令 第6列要运行的命令

记住几个特殊符号的含义:

“*”代表取值范围内的数字,

“/”代表”每”,

“-”代表从某个数字到某个数字,

“,”分开几个离散的数字

crontab文件的一些例子:

30 21 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每星期六的11 : 00 pm重启apache。

0 */1 * * * /usr/local/etc/rc.d/lighttpd restart

每一小时重启apache

0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

一月一号的4点重启apac

每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50 7 * * * root run-parts /etc/cron.daily [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

每天早上6点

0 6 * * * echo 'Good morning.' >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。

每两个小时(第一个为15,指明没两个小时的第15min中执行一次)

15 */2 * * * echo 'Have a break now.' >> /tmp/test.txt

晚上11点到早上8点之间每两个小时和早上八点

0 23-7/2,8 * * * echo 'Have a good dream' >> /tmp/test.txt

每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

0 11 4 * 1-3 command line

每月(1号凌晨4:42)去执行/etc/cron.monthly内的脚本

42 4 1 * * root run-parts /etc/cron.monthly

注意: 'run-parts'这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名。

每天的下午4点、5点、6点的5 min、15 min、25 min、35 min、45 min、55 min时执行命令。

5,15,25,35,45,55 16,17,18 * * * command

每年的一月和四月,4号到9号的3点12分和3点55分执行/bin/rm -f expire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。

12,553 4-91,4 * /bin/rm -f expire.1st$#@62;$#@62;mm.txt (头大)

自己测试小实验,了解他的大概流程与原理:

root123456@ubuntu:~$ crontab –e

109763897_1_20170831033335786

使用vi编译器,第一次使用Ubuntu它会让你选着编译器,不要相信他的箭头(easies?)用了老半天就他最费劲 ,还是选择vi,别问为什么, 顺 手!

109763897_2_20170831033335879

在里面最下面键入:测试代码

同时在目录下创建/tmp/1.txt

*/1 * * * * date >> /tmp/1.txt

意思是每一分钟将当时的数据打印到/tmp/1.txt中

然后esc –》:wq退出

保存之后重启服务

root123456@ubuntu:~$ sudo service cron restart

109763897_3_2017083103333620

查看结果

root123456@ubuntu:~$ cat /tmp/1.txt

109763897_4_20170831033336114

每分钟去打印一次时间到1.txt上

109763897_5_20170831033336254

定时执行任务这步就可以确定定时可以使用了额,上面的配置是测试定时任务,认识到定时启动任务是什么形式的,还可以去找其他的例子,变换时间 和执行的命令自己做测试。

这步骤是为了后面做铺垫,是后面的基础,就先在这提前介绍了。因为后面很“激情”来不及详细补充定时功能。

2、发送邮件相关配置

我认为重点和难点就是邮件的发送

自动发送邮件,使用命令行的方式发送邮件。先来陪着两个邮件服务mutt msmtp

在ubuntu下安装mutt很方便,只需要sudo apt-get install mutt

sudo apt-get install mutt

另外需要安装msmtp,一个发邮件的小工具,sudo apt-get insall msmtp。

sudo apt-get insall msmtp

109763897_6_20170831033336411

在安装的过程中会出现package configuration,这时候发现无发选到ok

按住Tab点亮ok 然后按住Enter键,接下来一顿默认猛如虎的操作(就乖乖的选默认)

假装有图(安过后就忘了截图噜!)

配置Muttrc

打开文件,路径/etc/Muttrc

set sendmail='/usr/bin/msmtp' set use_from=yes

109763897_7_20170831033336630

109763897_8_20170831033336770

配置msmtp

msmtp默认没有,所以在/etc路径下创建msmtprc配置文件

我本想用日志文件做测试,创建/var/log/msmtp.log,如果发生错误的话,能检测到原因

打开msmtprc文件配置下面的内容

account default host smtp.163.com 不要动from mailname@163.com 你的邮箱

109763897_9_20170831033336880

这个设置权限步骤,只要你胆子大就不用(我是没改,太难了)

由于我们的密码是明文,所以要稍稍的修改下权限(哈哈,你看不到我的pw,你看不到)

chmod 600 msmtprc

109763897_10_2017083103333720

109763897_11_20170831033337145

现在基本配置完成了,使用命令行输出测试一波

我把以my_first_test为主题,test为内容的邮件发送到另一个我的邮箱

echo 'test' |mutt -s 'my_first_test' 1599121712@qq.com

哈哈,成功

109763897_12_20170831033337270

到这里邮箱配置的环境可以了,现在只能只能用命令行发送邮件。如何做到自动发送,且向下see

常见的报错,搜一下一大推解决方案,奔溃边缘就重新配置,从0开始!

mutt的常用命令

mutt [-hnpRvxz][-a][-b][-c][-f][-F][-H][-i][-m][-s][邮件地址]

Linux命令参数:

-a文件>

-b地址>

-c地址>

-f邮件文件>

-F配置文件>

-h 显示帮助。

-H 将指定的邮件草稿送出

-i文件>

-m类型>

-n 不要去读取程序培植文件(/etc/Muttrc)

-p 在mutt中编辑完邮件后,而不想将邮件立即送出,可将该邮件暂缓寄出。

-R 以只读的方式开启邮件文件

-s主题>

-v 显示mutt的版本信息以及当初编译此文件时所给予的参数。

-x 模拟mailx的编辑方式。

-z 与-f参数一并使用时,若邮件文件中没有邮件即不启动mutt。

举个橘子:

mutt -s 'subject' -a /home/admin/backup.tar.gz <>

-s: 邮件标题,用''括上

-a: 邮件附件。如上命令就是将/backup目录下 backup.tar.gz文件作为附件发送。

<>

给多人发送邮件,只要在邮箱地址后加空格接着输入邮箱地址即可,如:

mutt -s 'subject' -a /home/admin/backup.tar.gz <>

网易163邮箱获取授权码

163免费邮箱可以直接要网页上进行收发邮件,,如果在客户端上收发邮件必须使用授权码才能够使用

授权码163邮箱的一个安全机制

登录163邮箱,在设置里面

109763897_13_20170831033337411

查看,应该是没开启的状态,我的开启了

109763897_14_201708310333385

点击开启,手机验证,输入的密码就是上面配置中输入的密码

同时开通POP3/SMTP/IMTP邮件收发服务,你的手机邮件都会记录下这个密码的。

在测试的时候出现错误:不要怕,去翻译去百度(我就是这么煎熬的过来的)

3、执行脚本编写

前面的的步骤成在Ubuntu上配置,下面就让发送邮件和定时功能结合起来,编写.sh小脚本

在tmp下创建emil文件夹

测试小实验:

在里面创建a.sh文件,输入

echo 'aaaaaaaaaa' | mutt -s 'this is title' 1599121712@qq.com

邮箱是要发到的邮箱。

109763897_15_20170831033338114

bash '/tmp/email/a.sh'

109763897_16_20170831033338255

收到邮件

109763897_17_20170831033338395

然后在crontab中定时执行这个脚本

crontab -e

添加定时语句,每一分钟执行一次a.sh的脚本

*/1 * * * * bash /tmp/email/a.sh

109763897_18_20170831033338567

保存 退出 重启服务器

109763897_19_20170831033338723

这是就会每分钟自动发送给你一次邮件

109763897_20_20170831033339176

不行我要赶紧关了,这一分钟一次也太烦了!!小实验到此实验成功!

下面写将python爬取数据的1.txt文本中的内容发送到邮件上的.sh脚本

同样的步骤依旧在原email的目录下创建1.sh和1.txt

编写1.sh内容

echo 'this is my computer'|mutt -s 'my_conputer server' 1599121712@qq.com

109763897_21_20170831033339301

然后让他定时运行脚本

*/30 * * * * bash /tmp/email/1.sh

30分钟给我发送一次,自己可以任意修改时间

109763897_22_20170831033339395

保存,重启服务

完成.sh脚本的编写

python爬虫程序的编写,将爬取的内容加入的/tmp/email/1.txt文档中

附录:随手最简单的爬虫小程序

import urllib.request

from bs4 import BeautifulSoup

url=' http://neihanshequ.com/'

html=urllib.request.urlopen(url).read()

soup=BeautifulSoup(html,'lxml')

ps=soup.find_all('p')

i=[]

for p in ps:

i.append(p.get_text())

with open ('/tmp/email/1.txt','w+') as f:

f.writelines(i)

实现过程 写好程序同样也放在email的目录下

然后crontab加入定时运行python

109763897_23_20170831033339551

定时运行py

总过程结束

效果图:

网页显示:将邮件放在指定的邮箱。

109763897_24_20170831033339755

网页

手机端显示:设置为每两分钟接受一次邮件。

109763897_25_20170831033339880

iphone

做这个小的应用集成,无非是做简单的技术实现,脑洞打开-同样也可以将里面的部分内容去置换。发送的邮件,不是这些无味的粗粮,如一些log日志,跟进工作中的copy事项,去完成其所需要的要求。邮件草稿>主题>类型>文件>邮件草稿>配置文件>邮件文件>地址>地址>文件>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值