开篇语
想象一下,当你跟别人聊天的时候,突然手机响了,你掏出来一看,默默点了下头。朋友探过头来问,谁的消息啊你淡定的告诉他:“哦,这个啊,是我的服务器发给我的,是我的爬虫给我扒下来的简书的数据”。闭上眼,你是不是仿佛能看到你朋友的眼神?~~
(补:机械原理考完了,机械原理考完了,机械原理考完了;项目进度讲完了~~~爽~~~~哦~~~燥起来~high起来)
正文
写作动机,跟上篇是类似的,我再复述一遍:
最近对简书中毒很深,所以想要写一个爬虫,放到服务器上,自己帮我随时查看简书的主页的更新状况,计划中是这样的:
这个爬虫,身兼数职:
** 1. 首先,每一个小时自动查询简书的主页的文章;**
** 2. 然后,比对名字相同的文章在一个小时内的阅读量,喜欢,评论,打赏数目,全部存储进入数据库,然后进行处理,比对,分析出每一篇文章不同时间的增长幅度以及系数还有对他们的位置进行排序;**
** 3. 最后,还要写一个六小时自动执行的数据汇总邮件发给我的脚本。**
昨晚已经写过关于爬虫从简书爬数据的文章了,没上首页有点可惜,争取这一篇上去!!
代码奉上(多次Debug,亲测可用;记得开启邮箱SMTP,下面有指导)
import smtplib
from email.mime.text import MIMEText
from email.header import Header
#设置服务器(我用的gmail,你们用的什么就换成什么
#比如qq,163~记得登录网页版邮箱然后在设置里面修改支持smtp
mail_host="smtp.gmail.com"
#用户名
mail_user="MyGmailName@gmail.com"
#邮箱密码
mail_pass="MyPasswordOfGmail"
sender = 'MyGmailName@gmail.com'
receivers = ['TheNameOfReceiver@163.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
#读取我的自动爬虫获取的内容
F = open("/home/test/bs.txt")
#list改成str格式,否则编码不通过
f=str(F.readlines())
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText(f, 'plain', 'utf-8')
message['From'] = Header("your remote server", 'utf-8')
message['To'] = Header("my lorder", 'utf-8')
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
try:
smtpObj=smtplib.SMTP_SSL(mail_host,465)
smtpObj.set_debuglevel(1)
# smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user,mail_pass)
smtpObj.sendmail(sender, receivers, message.as_string())
print ("邮件发送成功")
except smtplib.SMTPException:
print ("Error: 无法发送邮件")
Linux自动发送设置
Linux中,周期执行的任务一般由cron这个守护进程来处理。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。
相关命令
查看cron状态
sudo service cron status
开启cron
sudo /etc/init.d/cron start
关闭cron
sudo /etc/init.d/cron stop
重启cron
sudo /etc/init.d/cron restart
在crontab文件中写入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
合法值为:00-59 00-23 01-31 01-12 0-6 (0 is sunday)
除了数字还有几个特殊的符号:"*"、"/"和"-"、","
*代表所有的取值范围内的数字"/"代表每的意思,"/5"表示每5个单位"-"代表从某个数字到某个数字","分开几个离散的数字
注:commands 注意以下几点
要是存在文件,要写绝对路径。即使是打印也不会显示在显示屏,在后台运行,最好重定向日志.
step1:写cron脚本文件,命名为crontest.cron。
表示,每隔一小时,执行一次爬虫命令 ,并且定向日志为bs.txt
00 * * * * python3 /home/test/bs.py > /home/test/bs.txt
#这里有点多余的嫌疑,也就是,每一次写入都会覆盖前面的内容。相当于七次是白搞的。不过,测试嘛,任性~
00 08,16,23 * * * python3 /home/test/mailtome.py
step2:添加定时任务。执行命令
(在此之前先新建一个bs.log存放命令日志)
crontab /home/test/crontest.cron >> /home/test/bs.log
step3:"<code>crontab -l</code>" 查看定时任务是否成功或者检测/var/spool/cron下是否生成对应cron脚本
crontab -l
结果程序会每个小时里爬一次简书(~T~简书,你怕是不怕?~T~)写入文件bs.txt,然后每8个小时发送一次给我~~
结束语
今天特别开心,上午一大早,两年来仅有的几次迟到课堂(九点出发去找老师做进度汇报,然后十点四十回来,迟到了半个小时的CAD技术课),但是,怎么比得上进度汇报结束的开心呢?然后下午,照例点了一杯游泳馆小集贸的正好茶(特调咖啡,HUSTers,我推荐哦),然后闷头在东九怼机械原理,晚上考完,感觉还可以,不出意外90是保底,95有可能,要使老师改的松,接近100也不是没可能hia 哈哈哈~~现在这么开心的在这儿写文章,爽啊啊,后面更新会很频繁的,因为本学期只剩下三节课,最近的考试还是本月27号~~爽到飞起。钻研技术!钻研技术!!Python是我的本命语言之一,后期会继续更新的,不过更多的就是关于爬虫的调整了,有兴趣追更的朋友可以先去了解一下爬虫,要资料的话可以直接私戳我,留下邮箱---我到时候直接发给你就好了。OK,写的差不多了,找学妹聊天去了~~别误会,也是一个简书的人啦。最近想跟我学Python 。。。。hiahia,自己还没出师呢就收徒弟了~~~
个人宣言
知识传递力量,技术无国界,文化改变生活!