python爬虫 发送定时气象预报

python爬取天气情况

下面为示例代码:

from urllib.request import urlopen
from bs4 import BeautifulSoup
from urllib.error import HTTPError
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import time"""爬虫程序是一个需要后期投入很大维护力度的,就比如网页开发者将来在某一时间重构了html代码,这就很有可能导致爬虫程序的失败,所以写爬虫程序要尽量做到未雨绸缪,让爬虫程序更健壮,这样你才能睡一个安稳的觉这个程序很简单,大体分为两个部分,爬虫部分和邮件部分,代码还有很大的优化空间,比如一些常量可以拿到外面,这样代码看起来会更整洁,邮件内容是以html格式的形式发送的,这样你就可以改成自己喜欢的样式。我不建议你频繁的去发邮件,邮箱可能会被封掉,信件退回,导致发送失败发送电子邮件的邮箱要开启smtp客户端功能,邮箱——>设置——>开启SMTP服务,获取授权码(就是程序里需要登陆邮箱的密码)"""#获取当天的天气情况
def get_weather(url):try:html=urlopen(url).read()except HTTPError as e:return Nonetry:weather_list=[]bs0bj=BeautifulSoup(html,"html.parser")time.sleep(5)weather=bs0bj.find("div",{"class":"condition-icon wx-weather-icon vector"}).next_siblingstitle=bs0bj.body.h1.get_text()weather_list.append(title)for next in weather:weather_list.append(next.get_text())except AttributeError as e:return Nonereturn weather_list
#获取未来5天的天气情况
def get_5weathers(url):try:html=urlopen(url).read()except HTTPError as e:return Nonetry:weather5_list=[]bs0bj=BeautifulSoup(html,"html.parser")weathers=bs0bj.find("table",{"class":"twc-table"}).tbodyfor child in weathers.children:list1=[]for i in child.children:list1.append(i.get_text())list1.remove("")weather5_list.append(list1)except AttributeError as e:return Nonereturn weather5_list
#等到的数据形如一下数据格式
# weather=['北京, 中国', '3°', '晴朗', '体感温度 -1°', '高温 -- 低温 -7°紫外线指数 0(最大值10)']
# weathers=[['今天晚上\n12月 18日', '大部晴朗', '---7°', '0%', '北 15 公里 /小时 ', '40%'], ['星期二12月 19日', '晴朗', '5°-5°', '0%', '西南 21 公里 /小时 ', '32%'], ['星期三12月 20日', '晴朗', '7°-6°', '0%', '西北 22 公里 /小时 ', '33%'], ['星期四12月 21日', '晴朗', '6°-6°', '0%', '西南西 11 公里 /小时 ', '41%'], ['星期五12月 22日', '晴朗', '8°-6°', '0%', '北 16 公里 /小时 ', '30%'], ['星期六12月 23日', '晴朗', '8°-3°', '0%', '西北西 14 公里 /小时 ', '29%']]

# #***********************发送电子邮件*******************************
#第三方SMTP服务器def sendEmail():msg=MIMEText(mail_msg,"html","utf-8")msg["From"]=formataddr(["裤裆人",mail_user])msg["To"]=formataddr(["小裤裆人s",receive_address])msg["Subject"]="北京天气预报"try:smtp0bj=smtplib.SMTP_SSL(mail_host,465)smtp0bj.login(mail_user,mail_pass)smtp0bj.sendmail(mail_user,receive_address,msg.as_string())smtp0bj.quit()print("mail has been send to %s successfully."%receive_address)except smtplib.SMTPException as e:print(e)if __name__=="__main__":weather=get_weather("http://www.weather.com")weathers=get_5weathers("https://weather.com/zh-CN/weather/5day/l/CHXX0008:1:CH")if weather==None:exit()if weathers==None:exit()mail_host="smtp.163.com"mail_user="150XXxX65@163.com"    #发件人邮箱账号mail_pass="jXXxX199XXxX"          #发件人邮箱密码receives=["4352XXxX@qq.com","3426XXxX@qq.com","5437XXxX2@qq.com","6353XXxX9@qq.com",]    #收件人邮箱账号mail_msg="""<h1>裤裆人天气预报</h1><p style="color:#99cc00;font-size:15px">%s-->目前天气状况:温度%s ,%s ,%s ,%s </p><h3>以下是未来5天的天气情况</h3><table width="800px" border="0" cellspacing="1" cellpadding="0" style="text-align:center"><thead style="background-color:#3399ff"><tr style="line-height:40px;"><th>白天</th><th>说明</th><th>高/低</th><th>降雨概率</th><th>风力</th><th>湿度</th></tr></thead><tbody><tr style="background: #ccffcc"><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr><tr style="background: #ccffcc"><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr><tr style="background: #ccffcc"><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr><tr style="background: #ccffcc"><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr><tr style="background: #ccffcc"><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr></tbody>
</table>
<p style="color:red;font-size:10px">注意:每天早上八点准时发送邮件,希望小伙伴们,多多关注天气情况,注意保暖!</p>"""%(weather[0],weather[1],weather[2],weather[3],weather[4],weathers[0][0],weathers[0][1],weathers[0][2],weathers[0][3],weathers[0][4],weathers[0][5],weathers[1][0],weathers[1][1],weathers[1][2],weathers[1][3],weathers[1][4],weathers[1][5],weathers[2][0],weathers[2][1],weathers[2][2],weathers[2][3],weathers[2][4],weathers[2][5],weathers[3][0],weathers[3][1],weathers[3][2],weathers[3][3],weathers[3][4],weathers[3][5],weathers[4][0],weathers[4][1],weathers[4][2],weathers[4][3],weathers[4][4],weathers[4][5])for receive_address in receives:sendEmail()time.sleep(120)exit()

posted on 2018-04-01 10:19 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/ruiy/p/8685833.html

python爬虫 发送定时气象预报相关推荐

  1. Python爬虫之定时抢购淘宝商品

    Python爬虫之定时抢购淘宝商品 import time from selenium import webdriver import datetimeclass Spider:def __init_ ...

  2. Python爬虫之定时给TA发送微信消息(十七)

    原创不易,转载前请注明博主的链接地址:Blessy_Zhu https://blog.csdn.net/weixin_42555080 本次代码的环境: 运行平台: Windows Python版本: ...

  3. python爬虫定时爬取_如何用框架给python爬虫定时?

    生活中需要按时的事情很多,如果一旦错过原定的时间,就会出现一些不必要的麻烦要处理.在编程中,我们用python做测试,需要某个程序在固定的时间点启用,这就要用到python爬虫的定时功能.常用的几种定 ...

  4. python爬虫入门之————————————————第三节requests详解

    1.下载安装 (1)命令安装方式 Windows:打开命令窗口行,直接运行包管理命令安装          pip install requests   or  essy_install reques ...

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

    很多小伙伴找我问:老铁,这些代码我写的和你一样,为什么我的不行.其实这是最基本的函数,你照葫芦画瓢是没什么多大的作用的.我不会直接告诉你答案也不是我不想告诉你,而是希望你能跟着思路,自己找到答案,这才 ...

  6. python 定时执行 爬虫 模块_浅析python实现scrapy定时执行爬虫

    项目需要程序能够放在超算中心定时运行,于是针对scrapy写了一个定时爬虫的程序main.py ,直接放在scrapy的存储代码的目录中就能设定时间定时多次执行. 最简单的方法:直接使用Timer类 ...

  7. python 定时自动爬取_python实现scrapy爬虫每天定时抓取数据的示例代码

    1. 前言. 1.1. 需求背景. 每天抓取的是同一份商品的数据,用来做趋势分析. 要求每天都需要抓一份,也仅限抓取一份数据. 但是整个爬取数据的过程在时间上并不确定,受本地网络,代理速度,抓取数据量 ...

  8. python爬取新闻发送微信_如何利用 Python 爬虫实现给微信群发新闻早报?(详细)...

    image 1. 场景 经常有小伙伴在交流群问我,每天的早报新闻是怎么获取的? image 其实,早期使用的方案,是利用爬虫获取到一些新闻网站的标题,然后做了一些简单的数据清洗,最后利用 itchat ...

  9. python定时爬取数据_python实现scrapy爬虫每天定时抓取数据的示例代码

    1. 前言. 1.1. 需求背景. 每天抓取的是同一份商品的数据,用来做趋势分析. 要求每天都需要抓一份,也仅限抓取一份数据. 但是整个爬取数据的过程在时间上并不确定,受本地网络,代理速度,抓取数据量 ...

最新文章

  1. GPUImageMovieWriter实现暂停录制,重新录制
  2. python课程是学什么的-Python课程包括哪些内容?
  3. gradle不能下载最新依赖包问题
  4. SharePoint自动化系列——Solution auto-redeploy using Selenium(C#)
  5. linux ubuntu 软件安装的三种方式
  6. 上学帮:阿里云助力教育资讯平台防爬虫
  7. 【个人】微信小程序初体验
  8. 性能测试场景设计之用户启停设置
  9. kuangbin 基础DP1
  10. 数据结构视频教程 -《[猎豹网校]数据结构与算法_Java语言》
  11. 基于MPC5748G的以太网展板通信模块解析
  12. 通过stm32cubemx配置DCMI驱动ov5640摄像头
  13. 一文了解间隙配合、过盈配合、过渡配合的特点、区别及适用范围
  14. vue获取地址栏参数值
  15. 使用AutoHotKey将多行内容转成单行并翻译或获取中文拼音
  16. 一文看懂Modbus, Rtu, Rs485等名词的联系
  17. sis防屏蔽程序_程序员如何写一份更好的简历
  18. mysql meb备份_MySQL的企业备份(MEB)
  19. 华为开发者大会2020开幕,发布多项新开发者技术及系统
  20. Photoshop cs5 学习--ps软件的历史

热门文章

  1. Oracle导表语句
  2. PacBio三代测序
  3. C++ pair的使用
  4. 系统备份还原软件整理
  5. 解决SSH连接Linux超时自动断开
  6. bzoj 2724[Violet 6]蒲公英
  7. Vue.js之UI组件elementUI——MintUI
  8. photoshop中把图片颜色变成透明
  9. matlab拟合曲线后求导,高手留步:MATLAB五阶拟合函数,求导后离散化,输出结果是星号...
  10. 如何导出项目到本地_【点滴故事】:如何做项目本地化?