疯狂飞艇

当前位置:疯狂飞艇 > IT教程

买了个阿里学生服务器,想用服务器做些小东西(天气预报)

时间:2020-12-22 20:03:13来源:金橙教程网 作者:admin8 阅读:84次
 

学生服务器

灵感触发:

1.最近学了点Python爬虫,觉得挺有意思。

2.这几天天气不稳定,有时早上以为不会下雨就不带伞,结果回来的时候下大雨。(广东的天气,跟女生的心一样猜不透-。-)

3.懒得特意去查天气预报

于是乎,决定用python爬取第二天的天气,如果下雨,服务器发送邮件给我(微信能接受QQ邮箱,这样能及时看到这个消息

爬取天气:

思路:找个稳定的网站,保证网站的URL不会变,里面的信息是我学的那一点爬虫技巧能爬的。(我看过一些文章里面直接用api,但这类API很多都不稳定或者说收费的,比较了一下,爬这个简单的数据估计比用API还简单,稳定)。

经过一番查找,决定爬这个网页http://www.weather.com.cn/weather/101280101.shtml

用开发者工具确认位置后,去源代码页面看看(这种每天更新的页面,要么只在需要更新的地方使用动态获取,要么就是把网页写死,更新的时候直接把整个网页文本更换)

从源代码直接看到信息,说明是后者,这意味着这个爬虫简直不要太好写。

爬取思路:做成“汤”(beautifulsoup)后,找到属性class:sky skyid lv3的标签,再从里面找到第一个名字为p的标签,提取标签内字符串。(实在不需要什么技巧,我感觉这个网页对爬虫抱着支持的态度。)

import mail
import Requests
fROM bs4 import BeautifulSoup

guangZhouWeatherUrl = 'http://www.weather.com.cn/weather/101280101.shtml'
r = requests.get(guangZhouWeatherUrl)
if r.Status_code != 200:
        mail.send('get weather failure') #调用下文的发送邮件函数
        os._exit()
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text,'html5lib')
a = soup.find(attrs={'class':'sky skyid lv3'})
DATa = a.find('h1').String
weather = a.find('p').string
print(data + ' ' + weather)
mail.send(data + ' ' + weather)

输出结果: 1日(明天) 阵雨转多云

爬取成功,然后在学学怎么用python发送邮件。

这里特别说一下我遇到一个很烦的问题,在调用smtplib.SMTP_SSL时一直失败,我一开始以为是python的问题,然后把python3.6.5升级到python3.7.0,而我问了身边的朋友他们都行。卡了很久,最后发现是我阿里云的Centos7.3下,python不能import ssl,解决方法看链接

因为用得最多的是qq邮箱,所以理所当然的用QQ得smtp了,这里要用到QQ邮箱的授权码代替qq密码才能发邮件,具体方法:

拿到后就是常规的python发邮件技术了,这方面的文章百度很多,我并不觉得能比各位大神讲得更好,所以直接贴出我的代码

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

def send(content = 'nothing',toUser = '*******@qq.com'):
        sender='*******@qq.com'     # 发件人邮箱账号
        num = '*******' # 发件人邮箱密码(当时申请smtp给的口令)
        msg = MIMEText('I want to play a game!','plain','utf-8')
        msg['From'] = formataddr([content,sender])
        msg['To'] = formataddr(['to you','you'])
        msg['Subject'] = 'from my Server'
        try:
                server = smtplib.SMTP_SSL('smtp.qq.com',465)
                #server.set_debuglevel(1)
                server.login(sender,num)
                server.sendmail(sender,[toUser],msg.as_string())
                server.quit()
                return 1
        except Exception:
                return 0

为了方便看这些信息,我把发送邮件的发送人放信息的地方(发送人:明天 下雨,因为在锁屏的情况下,发送人的名字是最大的,所以放我想要看的信息),其他一些不必要的信息我也按照我个人心情来写,毕竟这个邮件是给自己看的,怎么看舒服就这么写。

代码写完了,可是怎么定时执行呢。我打算让这东西每天10点告诉我明天下不下雨。有两个思路:

一:让他一直跑,如果时间是10点,就爬信息,发邮件。我马上排除了这个,因为一想就觉得不对劲,让他一直跑不就一直耗我cpu了嘛,虽然很小,可是我的阿里云也很小啊!而且如果以后有很多项目,全都一直跑的话。。。想想都不“interesting”

二:用crontab。这是刚百度的。用这个可以定时执行sh文件,那我只要写个sh文件执行我的python文件不就行了咯。

我的第一个c.sh是这样写的:

python3 /home/getGuangZhouWeatherTomorrow.py

执行成功!ok,下一步

crontab -e
0 22 * * * /home/pythoncode/mailWeather/c.sh

也成功!

然后我静等邮件~~~

可是没有。经过半天的查资料,终于明白crontab里面调用的东西也要用绝对路劲(即使这个文件可以被你直接执行)。所以更改后:

/usr/local/bin/python3 /home/pythoncode/mailWeather/getGuangZhouWeatherTomorrow.py

终于成功!

经过一段时间的使用,发现这个网页存放一天数据的标签class属性是会发生变化的,故做下改变。

改用查找名称为'ul',class:t clearfix的标签。

总结一下遇到的凝难杂症:

1.centos7的ssl模板有问题(太久 或没有对此支持不全面吧),要先解决这问题才能用ssl相关函数

2.crontab 执行的sh文件都要使用绝对路径

相关阅读

阿里创作平台和淘宝联盟分别是什么意思?

阿里创作平台和淘宝联盟分别是什么意思?对于淘宝联盟可能大家都不陌生了,但是阿里创作平台真的出来了吗?我们把阿里创作平台和淘宝

刘强东性侵女大学生最新进展:警方掌握DNA证据 女生微信

A5创业网(公众号:iadmin5)9月25日消息,根据英国路透社发布的消息,刘强东性侵大学生事件或许有新的进展,该女生当晚的微信内容曝光,涉及

大学生乱炖特效片视频在线观看_大学生乱炖特效片视频

内容摘要:大学生乱炖特效片视频在线观看_大学生乱炖特效片视频百度云下载

阿里巴巴诚信通会员多少钱?使用效果怎么样?

近两年阿里巴巴诚信通很火,据说很多人在这个平台上赚了不少钱,这不很多卖家都按捺不住了,也想了解阿里巴巴诚信通这个平台,本小编今天

阿里巴巴代销怎么做?如何做好阿里巴巴代销?

阿里巴巴代销怎么做?如何做好阿里巴巴代销?您想做阿里巴巴代销吗?怎么去做好阿里巴巴代销呢?以下是小编整理的阿里巴巴代销怎么做

分享到:

IT相关

程序相关

推荐文章

热门文章

疯狂飞艇官网疯狂飞艇网址疯狂飞艇平台疯狂飞艇app疯狂飞艇下载