使用python实现定时报天气的示例代码

前言

如果你和我一样偶尔看看股票,看看自己关注的股票是涨了还是跌了,或者想快速获取到想看的头条新闻,我们不必把过多的注意力放在去寻找上面,我们只需要让爬虫程序每天自动为你发送你想要了解的信息就可以了,这样就能掌控我们的注意力,更好的去享受生活。

一.分析爬取目标

这里就不爬取股票的信息,我来爬一个天气预报的信息,然后实现每天定时发送。打开下面的链接就能跳转到中国气象网
http://www.weather.com.cnnn/

点击温度那个位置就可以进入下面的图

我们可以看到7天的天气和8-15天的天气,再往后对我们来说就没必要了。我们查看七日的天气预报,直接爬11日的天气,鼠标右键->检查->Network->刷新网页->查看列表第一个,再点击preview

可以看到数据在HTML里面,然后回到element

可以发现,温度数据放在<p class="tem">之下。“多云”所在的位置是<p title="晴" class="wea">晴</p>

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'}

# 封装headers
#这里对应的是我选的城市,可以换自己所在城市
url = 'http://www.weather.com.cn/weather/101010100.shtml'

# 把URL链接赋值到变量url上

res = requests.get(url, headers=headers)

# 发送requests请求,并把响应的内容赋值到变量res中。

print(res.text)

# 打印出res对象的网页源代码

print(res.status_code)

# 检查响应状态是否正常

看结果可以看到是响应是正常的,但是出现了乱码。但是莫慌。加上一句res.encoding='utf-8'就行了。

接下来就可以写完整的爬取信息的代码了

import requests

from bs4 import BeautifulSoup

headers={'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'}

#封装headers

url='http://www.weather.com.cn/weather/101010100.shtml'

#把URL链接赋值到变量url上

res=requests.get(url,headers=headers)

#发送requests请求,并把响应的内容赋值到变量res中

res.encoding='utf-8'

bsdata=BeautifulSoup(res.text,'html.parser')

#使用bs模块解析获取到的数据

data_temperature= bsdata.find(class_='tem')

#使用find()取出天气的温度数据

data_weather= bsdata.find(class_='wea')

#使用find()取出天气的文字描述

print(data_temperature.text)

#取出变量data_temperature中的字符串内容,并打印

print(data_weather.text)

#取出变量data_weather中的字符串内容,并打印

可以成功的得到需要的数据。

其实最难的不是爬虫,爬这种信息新手应该都会,接下里才是重头戏。

二.信息的发送

如果我们想要实现发送邮件,这里以qq邮件为例要经过以下的步骤:

  • 连接邮件服务器
  • 使用邮箱账号密码登录
  • 填写收件人,主题,正文等
  • 发送邮件

所以连接服务器要用到用到smtplib库,填写主题和撰写正文,需要用到email库(python真的是yyds)

1.连接服务器

SMTP代表简单邮件传输协议,相当于一种计算机之间发邮件的约定

smtplib是不需要安装的,smtplib是python的一个内置库,有兴趣的小伙伴可以看看官方文档

看下面的代码

import smtplib
mailhost='smtp.qq.com'
#把qq邮箱的服务器地址赋值到变量mailhost上,地址需要是字符串的格式。
qqmail = smtplib.SMTP()
#实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了
qqmail.connect(mailhost,25)
#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号

**mailhost=‘smtp.qq.com'**这句是qq邮箱的服务器地址,这个是可以查得到的

用SMTP对象的connect()方法连接服务器,第一个参数是获取到的服务器地址,第二个参数是SMTP端口号——25。端口号的选择不是唯一的,但是25是一个最简单、最基础的端口号,所以我们填25。

2.获取账号和密码

此密码非彼密码,这个密码需要我们去到这里获取:https://mail.qq.com/,登录你的邮箱。然后点击位于顶部的【设置】按钮,选择【账户设置】。

下拉到这个位置

点击开启第一个,然后得到授权码,如果以前获取过但是忘了,就需要发送短信重新获取,这个码一定不要外漏!!!

import smtplib

mailhost='smtp.qq.com'
#把qq邮箱的服务器地址赋值到变量mailhost上

qqmail = smtplib.SMTP()
#实例化一个smtplib模块里的SMTP类的对象,这样就可以SMTP对象的方法和属性了

qqmail.connect(mailhost,25)
#连接服务器,第一个参数是服务器地址,第二个参数是SMTP端口号。

sender = input('请输入你的邮箱:')
#获取邮箱账号

password = input('请输入你的密码:')
#获取邮箱密码

qqmail.login(sender,password)
#登录邮箱,第一个参数为邮箱账号,第二个参数为邮箱密码

receiver=input('请输入收件人的邮箱:')
#获取收件人的邮箱

所填密码就是刚才获取的授权码

3.填写主题和撰写正文

在这里就需要用到email库。

from email.mime.text import MIMEText

from email.header import Header

content=input('请输入邮件正文:')

#输入你的邮件正文

message = MIMEText(content, 'plain', 'utf-8')

#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码

subject = input('请输入你的邮件主题:')

#用input()获取邮件主题  

message['Subject'] = Header(subject, 'utf-8')

我们还需要引入了email库中的MIMEText模块和Header模块
最后一行代码:在等号的右边,是实例化了一个Header邮件头对象,该对象需要写入两个参数,分别是邮件主题和编码,然后赋值给等号左边的变量message[‘Subject'],message[‘Subject']就代表着根据MIMEText类里面的Subject的属性名取到该属性

代码有注释还不明白的话可以去看看文档,

4.发送邮件和退出邮箱

将前面的代码整合以下

from email.mime.text import MIMEText

from email.header import Header

#引入Header和MIMEText模块

content=input('请输入邮件正文:')

#输入你的邮件正文

message = MIMEText(content, 'plain', 'utf-8')

#实例化一个MIMEText邮件对象,该对象需要写进三个参数,分别是邮件正文,文本格式和编码

subject = input('请输入你的邮件主题:')

#用input()获取邮件主题

message['Subject'] = Header(subject, 'utf-8')

qqmail.sendmail(sender, receiver, message.as_string())

qqmail.quit()
#退出邮箱

sendmail() 发送邮件,括号里面有三个参数,第1个是发件人的邮箱地址,第2个是收件人的邮箱地址,第3个是正文,但必须是字符串格式,所以用as_string()函数转换了一下。

但是我们希望发送成功后能显示“邮件发送成功”,失败的时候能提示我们“邮件发送失败”,可以使用try语句来实现。

try:
    qqmail.sendmail(sender, receiver, message.as_string())
    print ('邮件发送成功')
except:
    print ('邮件发送失败')
qqmail.quit()

三.定时发送

关于时间,其实Python有两个内置的标准库——time和datetime,但是我们不用,诶,就是玩,我们可以用第三方库schedule其实是有原因的:对于我们需要的定时功能,time和datetime当然能实现,但操作逻辑会相对复杂;而schedule就是可以直接解决定时功能,代码比较简单,这是我们选择schedule的原因。
官方文档链接:https://pypi.org/project/schedule/
根据文档我们做一个每3秒运行一次的程序

import schedule
import time
#引入schedule和time模块
def job():
    print("Working in progress...")
#定义一个叫job的函数,函数的功能是打印'I'm working...'
schedule.every(3).seconds.do(job)
while True:
    schedule.run_pending()
    time.sleep(1)

也可以设置在某个时间发送,用法很多,这里就不展开。最后把这些代码全部合并整合一下,下面看效果

四.效果

这里我定的下午三点四十六,然后发送成功,我打开我的邮箱确实能收到

这个功能我放在服务器上用了很久了,爬一些平时自己必看的信息,然后发送,减少了自己被其他东西吸引注意力的几率。

这篇文章不在于爬取天气信息这块,而是通过这种方式去实现定时发送邮件,只要用的好能为自己省下很多的时间和精力去在信息大海里面查找自己想要的信息。

到此这篇关于使用python实现定时报天气的示例代码的文章就介绍到这了,更多相关python 定时报天气内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 基于Python实现定时自动给微信好友发送天气预报

    效果图 from wxpyimport * import requests from datetimeimport datetime import time from apscheduler.schedulers.blockingimport BlockingScheduler#定时框架 bot = Bot(cache_path=True) tuling = Tuling(api_key=你的api')#机器人api def send_weather(location): #准备url地址 pa

  • 详解用python自制微信机器人,定时发送天气预报

    0 引言 前段时间找到了一个免费的天气预报API,费了好段时间把这个API解析并组装成自己想用的格式了,就想着如何实现每天发送天气信息给自己.最近无意中发现了wxpy库,用它来做再合适不过了.以下是wxpy库的简介: wxpy基于itchat,使用了 Web 微信的通讯协议,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展.实现了微信登录.收发消息.搜索好友.数据统计.微信公众号.微信好友.微信群基本信息获取等功能. 废话不多说,代码写起来. 1 环境 操作系统:Windows / Li

  • Python定时发送天气预报邮件代码实例

    这篇文章主要介绍了Python定时发送天气预报邮件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用python爬虫爬到的天气预报,使用smtplib和email模块可以发送到邮箱,使用schedule模块可以定时发送.以下是代码- #导入模块 import requests from bs4 import BeautifulSoup import smtplib from email.mime.text import MIMEText

  • python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)

    最近想着做一个微信机器人,主要想要实现能够每天定时推送天气预报或励志语录,励志语录要每天有自动更新,定时或当有好友回复时,能够随机推送不同的内容.于是开始了分析思路.博主是采用了多线程群发,因为微信对频繁发送消息过快还会出现发送失败的问题,因此还要加入time.sleep(1),当然时间根据自身情况自己定咯.本想把接入写诗机器人,想想自己的渣电脑于是便放弃了,感兴趣的可以尝试一下.做完会有不少收获希望对你有帮助. (1)我们要找个每天定时更新天气预报的网站,和一个更新励志语录的网站.当然如果你想

  • python定时利用QQ邮件发送天气预报的实例

    大致介绍 好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下 1.首先利用request库去请求数据,天气预报使用的是和风天气的API(www.heweather.com/douments/api/s6/weather-forecast) 2.利用python的jinja2模块写一个html模板,用于展示数据 3.python的email构建邮件,smtplib发送邮件 4.最后使用crontab定时执行python脚本 涉及的具体知识可以去看文档,本文主要就是

  • 使用python实现定时报天气的示例代码

    前言 如果你和我一样偶尔看看股票,看看自己关注的股票是涨了还是跌了,或者想快速获取到想看的头条新闻,我们不必把过多的注意力放在去寻找上面,我们只需要让爬虫程序每天自动为你发送你想要了解的信息就可以了,这样就能掌控我们的注意力,更好的去享受生活. 一.分析爬取目标 这里就不爬取股票的信息,我来爬一个天气预报的信息,然后实现每天定时发送.打开下面的链接就能跳转到中国气象网 http://www.weather.com.cnnn/ 点击温度那个位置就可以进入下面的图 我们可以看到7天的天气和8-15天

  • Go/Python/Erlang编程语言对比分析及示例代码

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴与它的三个祖先:C,Pascal和CSP.Go的语法.数据类型.控制流等继承于C,Go的包.面对对象等思想来源于Pascal分支,而Go最大的语言特色,基于管道通信的协程并发模型,则借鉴于CSP分支. Go/Python/Erlang语言特性对比 如<编程语言与范式>一文所说,不管语言如何层出不穷

  • python tkinter实现界面切换的示例代码

    跳转实现思路 主程序相当于桌子: import tkinter as tk root = tk.Tk() 而不同的Frame相当于不同的桌布: face1 = tk.Frame(root) face2 = tk.Frame(root) ... 每个界面采用类的方式定义各自的控件和函数,每个界面都建立在一个各自定义的Frame上,那么在实现跳转界面的效果时, 只需要调用tkinter.destroy()方法销毁旧界面,同时生成新界面的对象,即可实现切换. 而对于切换的过程中改变背景颜色和大小,可以

  • python实现网站微信登录的示例代码

    最近微信登录开放公测,为了方便微信用户使用,我们的产品也决定加上微信登录功能,然后就有了这篇笔记. 根据需求选择相应的登录方式 python实现网站微信登录的示例代码 微信现在提供两种登录接入方式 移动应用微信登录 网站应用微信登录 这里我们使用的是网站应用微信登录 按照 官方流程 1 注册并通过开放平台开发者资质认证 注册微信开放平台帐号后,在帐号中心中填写开发者资质认证申请,并等待认证通过. 2 创建网站应用 通过填写网站应用名称.简介和图标,以及各平台下载地址等资料,创建网站应用 3 接入

  • 使用python画个小猪佩奇的示例代码

    基本原理 选好画板大小,设置好画笔颜色.粗细,定位好位置,依次画鼻子.头.耳朵.眼睛.腮.嘴.身体.手脚.尾巴,完事儿. 都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称"海龟绘图",它是基于 Tkinter 模块打造,提供一些简单的绘图工具. 在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动.这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条.通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片.

  • python绘制BA无标度网络示例代码

    如下所示: #Copyright (c)2017, 东北大学软件学院学生 # All rightsreserved #文件名称:a.py # 作 者:孔云 #问题描述: #问题分析:.代码如下: import networkx as ne #导入建网络模型包,命名ne import matplotlib.pyplot as mp #导入科学绘图包,命名mp #BA scale-free degree network graphy BA=ne.barabasi_albert_graph(50,1)

  • python 实现人和电脑猜拳的示例代码

    完成人机猜拳互动游戏的开发,用户通过控制台输入实现出拳,电脑通过程序中的随机数实现出拳,每一局结束后都要输出结果.当用户输入n时停止游戏,并输出总结果. import random all = ['石头','剪刀','布'] computer = random.choice(['石头','剪刀','布']) #所有赢了的情况 win = [['石头','剪刀'],['布','石头'],['剪刀','布']] class Text(): def func_play(self): ind = inp

  • Python操作Excel工作簿的示例代码(\*.xlsx)

    前言 Excel 作为流行的个人计算机数据处理软件,混迹于各个领域,在程序员这里也是常常被处理的对象,可以处理 Excel 格式文件的 Python 库还是挺多的,比如 xlrd.xlwt.xlutils.openpyxl.xlwings 等等,但是每个库处理 Excel 的方式不同,有些库在处理时还会有一些局限性. 接下来对比一下几个库的不同,然后主要记录一下 xlwings 这个库的使用,目前这是个人感觉使用起来比较方便的一个库了,其他的几个库在使用过程中总是有这样或那样的问题,不过在特定情

  • Python实现多线程下载脚本的示例代码

    0x01 分析 一个简单的多线程下载资源的Python脚本,主要实现部分包含两个类: Download类:包含download()和get_complete_rate()两种方法. download()方法种首先用 urlopen() 方法打开远程资源并通过 Content-Length获取资源的大小,然后计算每个线程应该下载网络资源的大小及对应部分吗,最后依次创建并启动多个线程来下载网络资源的指定部分. get_complete_rate()则是用来返回已下载的部分占全部资源大小的比例,用来回

  • Python 实现敏感目录扫描的示例代码

    01 实现背景 1.PHPdict.txt,一个文本文件,包含可能的敏感目录后缀 2.HackRequests模块,安全测试人员专用的类Requests模块 02 实现目标 利用HackRequests模块,配合敏感目录字典PHPdict.txt,实现一个简单的敏感目录扫描Python文件 03 注意事项 1.输入URL时要输全:如 https://www.baidu.com/. https://www.csdn.net/ 2.为防止网站可能存在的简单反爬机制,我们简单添加headers信息,尝

随机推荐