smtp在线发送邮件_基于树莓派3B,利用爬虫、SMTP和发送邮件amp;amp;(爬取墨迹天气预报信息)...

news/2024/11/30 15:33:05/

4d3c4d5a4cbb52262dbcfefbe36efff8.png

转载请注明:

利用爬虫、SMTP和树莓派3B发送邮件&续集&(爬取墨迹天气预报信息) - 永怀一颗学徒的心 - 博客园​www.cnblogs.com
6d32c833cc2a04e0d3cab2b348288aa7.png
ZXPXBB:基于树莓派3B,利用爬虫、SMTP和发送邮件&&(爬取墨迹天气预报信息)​zhuanlan.zhihu.com

先给大家道个歉,我的上一篇文章中没有在树莓派的交互界面进行操作实验,而且我答应大家一定会把这个实验补上,虽然没太有空整理,

但是自己说出来的承诺,我必须要兑现,认真对待我的每一篇文章,认真对待我的每个读者,认真对待自己的内心,不能应付着就过去了,

所以我特意给挤出时间怀着愧疚与坚定地心情再次分享完善这个小项目。

3c1bb1a20a35772f21a7a8f22749a4ed.png

一开始出了很多问题,果然还是那句金句名言,切勿眼高手低

既然答应给大家一个交代,那咱们一个个慢慢说:

1、上来直接运行有错误的说缺乏bs4、beautifulsoup库,命令安装;

#python2:
sudo apt-get install python-bs4
sudo pip install beautifulsoup4
#python3:
sudo apt-get install python3-bs4
sudo pip3 install beautifulsoup4

关于报错信息:pip3无效命令的解决

  首先安装setuptools(一定要用sudo管理员权限做,如果长时间连接不上主机Ctrl+C,重新执行命令)

cd /usr/local/src/
sudo wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz
tar -zxvf setuptools-19.6.tar.gz
cd setuptools-19.6/
python3 setup.py build
python3 setup.py install

其次安装pip3(网络不佳很正常,多试几次多试几次)

cd /usr/local/src/
sudo wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz
tar -zxvf pip-8.0.2.tar.gz
cd pip-8.0.2/
python3 setup.py build
python3 setup.py install

https://www.jianshu.com/p/d4c1a08b993f

测试安装成功,运行命令pip3成功

9d7065319201cd5c73fff73f39250b47.png

2、报错信息:

FeatureNotFound: Couldn't find a tree builder with the features you requestehttps://blog.csdn.net/qq_16546829/article/details/79405605

在报错代码中把函数参数中所有的"lxml"改成"html.parser"

#例子:
bs = BeautifulSoup(r, 'lxml').find(....
#改成 bs = BeautifulSoup(r, 'html.parser').find(....
html.parser是调用python解析器,但是没有解决lxml库不能用的问题啊

3、看到差别了吧,使用win10_url无法打开网页,你可以试试,所以问题就很严重了,我们根本打不开网页,所以后续的爬虫工作根本从源头就已经宣告over了.....这也是一个小细节。

6910b46a7374c90b166b82743a6a8b40.png

4、中文编码报错信息与解决方案:

65916d63cfbcd62f822b81fb1760b13e.png

这个报错信息很显然就是一贯的中文编码问题,让人很头疼,我加上了:

#!/home/pi/SmartHome/SMTP/ok'
#*_*coding:utf-8_*_

但依然没卵用,随即我百度找到一位网友写的文章如下:

https://blog.csdn.net/weixin_39221360/article/details/79525341

注意如果你的设备同时安装了 Python 2.x 和 Python 3.x,你需要用 python3 运行

Python 3.x:
$python3 myScript.py
当你安装包的时候,如果有可能安装到了 Python 2.x 而不是 Python 3.x 里,就需要使用:
$sudo python3 setup.py install
如果用 pip 安装,你还可以用pip3 安装 Python 3.x 版本的包:
$pip3 install beautifulsoup4 https://blog.csdn.net/DoctorLDQ/article/details/73230026


解决方法有三中:

1.在命令行修改,仅本会话有效:
1)通过>>>sys.getdefaultencoding()查看当前编码(若报错,先执行>>>import sys >>>reload(sys));
2)通过>>>sys.setdefaultencoding('utf8')设置编码

2.较繁琐,最有效
1)在程序文件中以下三句
import sys
reload(sys)
sys.setdefaultencoding('utf8')
3.修改Python本环境(推荐)
在Python的Libsite-packages文件夹下新建一个sitecustomize.py文件,内容为:
#coding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

重启Python解释器,发现编码已被设置为utf8,与方案二同效;这是因为系统在Python启动的时候,自行调用该文件,

设置系统的默认编码,而不需要每次都手动加上解决代码,属于一劳永逸的解决方法。

#在这里我是用的是以下方法,感觉很方便,但是最后一个我感觉很好一劳永逸不错不错,但是我没找着....
import sys
reload(sys)
sys.setdefaultencoding('utf8')

5、header的改变,这也是一处一定要注意的细节。

如何获取网页的header{ ...}方法我还是简单说一下吧,会的自行略过,去自己电脑打开的网页copy吧。

打开url,F12 然后 Ctrl+R

0973708279f1d1bfa3e0e645e446b36e.png

按照以下格式进行选取,写入我们的程序中。(不要漏掉逗号!!!!)

header = {'authority':'h5tq.moji.com','accept':'image/webp,image/apng,image/*,*/*;q=0.8','accept-encoding':'gzip, deflate, br','accept-language':'zh-CN,zh;q=0.9','cache-control':'no-cache','pragma':'no-cache','referer':'https://tianqi.moji.com/weather/china/shandong/penglai','user-agent':'Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/72.0.3626.121 Chrome/72.0.3626.121 Safari/537.36'}

6、....还没么,今下午几个小时整理的比较急 ,如果还有什么问题请留言评论或者私信我都可以。

#利用树莓派发送天气预报邮件
import time
import smtplib
import requests
import random
import socket
import bs4
import sys
reload(sys)
sys.setdefaultencoding('utf8')
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Headerdef get_content(url):header = {'authority':'h5tq.moji.com','accept':'image/webp,image/apng,image/*,*/*;q=0.8','accept-encoding':'gzip, deflate, br','accept-language':'zh-CN,zh;q=0.9','cache-control':'no-cache','pragma':'no-cache','referer':'https://tianqi.moji.com/weather/china/shandong/penglai','user-agent':'Mozilla/5.0 (X11; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Raspbian Chromium/72.0.3626.121 Chrome/72.0.3626.121 Safari/537.36'}timeout = random.choice(range(80, 180))while True:try:rep = requests.get(url,headers = header,timeout = timeout)rep.encoding = 'utf-8'breakexcept socket.timeout as e:print( '3:', e)time.sleep(random.choice(range(8,15)))except socket.error as e:print( '4:', e)time.sleep(random.choice(range(20, 60)))return rep.textdef get_weather(url,data):air_list = []weather_list = []#weather_status = []soup = BeautifulSoup(data,'lxml')div = soup.find('div',{'class' : 'forecast clearfix'})air_quality = div.find('strong',class_='level_2').string    #空气质量date = div.find('a',href='https://tianqi.moji.com/today/china/shandong/penglai').stringwind_direction = div.find('em').string   #风向wind_grade = div.find('b').string           #风速ul = div.find('ul',{'class' : 'clearfix'})##  天气情况抽取  ##a = []li = ul.find_all('li')j=0#return lifor i in li:j+=1if j==2:a = ia = str(a).replace('n','').replace('t','').replace(' ','').replace("</li>","").replace('r','')a = a.replace('<li><span>','').replace('<imgalt=','').replace('src="https://h5tq.moji.com/tianqi/assets/images/weather/','')a = a.replace('.png/></span>','').replace('.png"/></span>','').replace('"','').replace('t','')for x in range(100,-1,-1):#print("w{0}".format(x))a = a.replace(("w{0}".format(x)),'')if(len(a)==2):a = a[0:1]if(len(a)==4):a = a[0:2]          #print(a)for day in li:if not isinstance(day,bs4.element.Tag): date = day.find('a',href='https://tianqi.moji.com/today/china/shandong/penglai').stringweather_list.append(day.string)if not isinstance(day,bs4.element.Tag):wind_direction = day.find('em').stringwind_grade = day.find('b').stringTempreture = weather_list[2]air_quality =air_quality.replace("n","").replace(' ','')#air_quality = str(air_quality).replace('n','').replace(' ','')#print("data {0}  Tempreture {1}".format(date,Tempreture))return (" 时   间 : {}n 天气情况: {}n 温   度 : {}n 风   向 : {}n 风   速 : {}n 空气质量: {}n".format(date,a,Tempreture,wind_direction,wind_grade,air_quality))def send_email(email):'''sender = input('From: ')password = input('password: ')smtp_server = input('SMTP_Server: ')
'''##     FROM    ##sender = 'wyl13****25@sohu.com'sent_host = 'smtp.sohu.com'sent_user = 'wyl13*****25@sohu.com'sent_pass = '****密码****'##     TO     ##receivers = ['13****25@qq.com','2******09@qq.com']#message = MIMEText("亲爱的,我现在来播报今天的蓬莱天气。n(嗯...其实现在还只能看不能播)如下所示:n 时 间| 天气情况 | 温 度 | 风 向 | 风 速 | 空气质量n'{0}n".format(result),'plain','utf-8')message = MIMEText("亲爱的今天蓬莱天气是这样的呦 :n{}n".format(result),'plain','utf-8')##   JUST USE TO DISPLAY   ##message['From'] = Header('树莓派(From)','utf-8')message['To'] = Header('win10(To)','utf-8')Subject = "今天的天气预报详情,来自树莓派!"message['Subject'] = Header(Subject,'utf-8')   #标题try:server = smtplib.SMTP()#server = smtplib.SMTP(sent_host,25)print("SMTP complete")server.connect(sent_host,25)print("connect complete")#server.set_debuglevel(1)server.login(sent_user,sent_pass)print("login complete")server.sendmail(sender,receivers[0],message.as_string())print("邮件发送成功")#server.quit()except smtplib.SMTPException:print("Error:发生未知错误,无法发送邮件!")if __name__  == '__main__':result =[]#win10_url = 'http://tianqi.moji.com/weather/china/shandong/penglai'url = 'https://tianqi.moji.com/weather/china/shandong/penglai'data = get_content(url)result = get_weather(url,data)result = str(result).replace("r","").replace('t','').replace('r','').replace("n","")print("result is n{}n".format(result))#send_email(result)

最后测试结果如下:

c5c823d16f419bee6bf242c93e7021cc.png

大家应该也看到了有个很明显的BUG就是晴晴,

但是经过我的测试,在python3下完全ok,毕竟3才是未来的霸主,2就不要花太多心思了。

我上面也有pip3的教程,安装好了,把我们所需的库安装到位,打开方式切换为python3IDLE否则默认都是python2IDLE

而且。。。而且python2中也没有运行结果没有输出,也许是因为python2 和 python3 的输出函数不一样所致,

python2 中print 没有括号,python3中更加严谨规范带有括号。

d38f617cf8aed8e5961704505b4e96b5.png

4328c484b3082d892899b8bb1ca0dfe8.png

终于兑现了,舒心了不少....整理的不够到位的地方还请指正。

过一阵子再给大家更新一个带语音播报的邮件出来?我也不知道没想好,会分享给大家,敬请期待吧。

当然这篇教程只是用来学习,请勿进行商业活动甚至非法活动,切勿侵害他人权益,提前声明概不负责。

如果觉得我的文章还不错,关注一下,顶一下 ,我将会用心去创作更好的文章,敬请期待。


http://www.ppmy.cn/news/625471.html

相关文章

利用爬虫、SMTP和树莓派3B发送邮件续集(爬取墨迹天气预报信息)

-----------------------------------------------学无止境----------------------------------------------- 前言&#xff1a;大家好&#xff0c;欢迎来到誉雪飞舞的博客园&#xff0c;我的每篇文章都是自己用心编写&#xff0c; 算不上精心但是足够用心分享我的自学知识&…

Python-定时爬取指定城市天气(二)-邮件提醒

文章目录 一、概述二、模块重新划分三、优化定时任务四、发送邮件五、源代码 一、概述 上一篇文章python-定时爬取指定城市天气(一)-发送给关心的微信好友中我们讲述了怎么定时爬取城市天气&#xff0c;并发送给指定微信好友&#xff0c;文末遗留两个问题 定时任务做成window…

爬取最近七天的天气情况并实现语言播报-Python综合实战

文章目录 前言实现思路实现过程寻找目标网站爬取目标网页解析网页整理数据创建语音接口将数据与接口对接实现效果实例全代码脚本打包 总结 前言 Python是一门很强大的语言&#xff0c;用它可以做到很多事情&#xff0c;我自己也学Python一些天了&#xff0c;也了解了一些知识&a…

南郑县天气预报软件测试,汉中 高速公路环境气象监测系统 24小时自动化监测...

汉中 高速公路环境气象监测系统 24小时自动化监测项目背景 路面状况监测为道路安全文明驾驶起到重要辅助作用。驾驶员在驾驶车辆行驶过程中需要高效快速的判断前方路况&#xff0c;提前了解前方路况对驾驶员安全文明行驶起到非常重要的作用&#xff0c;路面状况监测仪通过对能见…

AWS 开源 SageMaker;天气预报用上 AR 特效

(给技术最前线加星标&#xff0c;每天看技术热点) 转自&#xff1a;开源中国、solidot、cnBeta、腾讯科技、快科技等 【技术资讯】 0、AWS 开源 SageMaker&#xff0c;帮助开发人员优化机器学习模型 Amazon WebServices 已经发布了来自其 SageMaker Neo 机器学习的相关代码&…

2023一造土建安装案例《十年真题▪九套模拟》

造价工程师&#xff0c;是指通过全国统一考试取得中华人民共和国造价工程师执业资格证书&#xff0c;并经注册后从事建设工程造价工作的专业人员。国家对造价工程师实行准入类职业资格制度&#xff0c;纳入国家职业资格目录。凡从事工程建设活动的建设、设计、施工、造价咨询等…

MySQL GROUP BY 多个字段的用法说明

MySQL GROUP BY 多个字段的用法说明 1. 说明2. 举例附录 1. 说明 在 mysql 中使用 group by 的意思是分组查询。如果 group by 后面跟的是单个字段&#xff0c;那么表示按照这个字段分组查询&#xff0c;如果 group by 后面跟的是多个字段&#xff0c;那么表示按照这些字段的不…

win10电脑开机突然变慢的原因及解决方法

win10电脑使用一段时间后&#xff0c;开机速度就慢慢的变得越来越慢了&#xff0c;严重拖慢开机速度&#xff0c;有什么办法解决&#xff1f;这是因为系统不断安装软件导致启动项增多拖慢了开机速度&#xff0c;但安装的软件都很重要&#xff0c;有什么办法在不卸载软件的情况下…