第一部分:爬取天气数据

# 在函数调用 get_weather(url = 'https://www.tianqi.com/foshan') 的 url中更改城市,foshan为佛山市
 1 import requests
2 from lxml import etree
3
4 ### 爬取www.tianqi.com的今日和明日数据
5 def get_weather(url = 'https://www.tianqi.com/hangzhou/'):
6 headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
7 html = requests.get(url,headers = headers)
8 bs = etree.HTML(html.text)
9 # 今天天气相关数据:日期,星期几,天气,最低气温,最高气温
10 today_date = bs.xpath('//ul[@class = "week"]/li[1]/b/text()')[0]
11 today_week = bs.xpath('//ul[@class = "week"]/li[1]/span/text()')[0]
12 today_weather = bs.xpath('//ul[@class = "txt txt2"]/li[1]/text()')[0]
13 today_low = bs.xpath('//div[@class = "zxt_shuju"]/ul/li[1]/b/text()')[0]
14 today_high = bs.xpath('//div[@class = "zxt_shuju"]/ul/li[1]/span/text()')[0]
15 # 明天天气相关数据,维度和上述一致
16 tomorrow_date = bs.xpath('//ul[@class = "week"]/li[2]/b/text()')[0]
17 tomorrow_week = bs.xpath('//ul[@class = "week"]/li[2]/span/text()')[0]
18 tomorrow_weather = bs.xpath('//ul[@class = "txt txt2"]/li[2]/text()')[0]
19 tomorrow_low = bs.xpath('//div[@class = "zxt_shuju"]/ul/li[2]/b/text()')[0]
20 tomorrow_high = bs.xpath('//div[@class = "zxt_shuju"]/ul/li[2]/span/text()')[0]
21 # 信息组合
22 tomorrow = ('明天是%s,%s,%s,%s-%s度,温差%d度')% \
23 (tomorrow_date,tomorrow_week,tomorrow_weather,tomorrow_low,tomorrow_high,int(int(tomorrow_high)-int(tomorrow_low)))
24 #计算今明两天温度差异,这里用的是最高温度
25 temperature_distance = int(tomorrow_high) - int(today_high)
26 if temperature_distance > 0:
27 text2 = '明日升温%d' % temperature_distance
28 if temperature_distance < 0:
29 text2 = '明日降温%d' % temperature_distance
30 else:
31 text2 = '明日气温变化不明显'
32 #计算两个日期天数差
33 from dateutil import rrule
34 from datetime import datetime
35 import time
36
37 firstDay = datetime(2019,2,11)
38 endDay = datetime.now()
39 days = rrule.rrule(freq = rrule.DAILY,dtstart=firstDay,until=endDay)
40 text3 = '\n今天是我们在一起的第%d天\n' % days.count()
41
42 #设置输出内容和格式
43 text1 = '您的小可爱发来的人文关怀(○`(●●)´○)ノ\n\n'
44 text4 = '新的一天,我们一起努力ヾ(≧O≦)〃嗷~!\n'
45 content = text1,tomorrow,text2,text3,text4
46 return content

第二部分:发送邮件

# 在函数调用 send_email(contents,send_to = 'receiver_email@xx.com') 的 send_to 中更改接收方邮箱地址
# 在函数定义 send_email 的 user,password,host,port 中更改发送方的邮箱账号,密码和 host 和 port 等信息
# 其中,password 不能直接用邮箱密码,而要改为授权码,授权码获取方式(如 QQ邮箱: https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256%27)
# 其中,host 和 post 不同的邮箱类型不一样(如,网易邮箱和 QQ邮箱就不一样),需要根据自己的邮箱类型自行更改
 1 import yagmail
2
3 ### 发送邮件
4 def send_email(contents,send_to = 'receiver_email@xx.com'):
5 #登录邮箱,设置登录的账号,密码和 port等信息(发送方的)
6 yag = yagmail.SMTP(user = 'xxxxxxxxxxxxxxxxxxxxxxxx@qq.com',password = 'zqpokkghxmepgfcd',
7 host = 'smtp.qq.com',port = '465')
8 #登录完即可一键发送,设置发送给谁,和邮件主题,邮件内容
9 yag.send(to = send_to,
10 subject = 'I love U',
11 contents = contents)
12 print('发送成功!~')

第三部分:函数调用

contents = get_weather(url = 'https://www.tianqi.com/foshan/')
send_email(contents, send_to='xxxxxxxxxxxxxxxxxxxxxxx@qq.com')

本来的想法是做成一个每天定时自动发送天气邮件的脚本,但麻烦的点在于设备需要保持联网,所以就做了一次性的脚本。取走请留言。

Python脚本:爬取天气数据并发邮件给心爱的Ta的更多相关文章

  1. python爬虫爬取天气数据并图形化显示

    前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...

  2. 毕设之Python爬取天气数据及可视化分析

    写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...

  3. 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中

    1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...

  4. python之爬取网页数据总结(一)

    今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests    Beautifulsoup4   lxml  三个插件 ...

  5. php外挂python脚本抓取ajax数据

    之前我写过一遍php外挂python脚本处理视频的文章.今天和大家分享下php外挂python实现输入关键字搜索的脚本 首先我们先来分析一波网站: http://www.dzdpw.com/s.php ...

  6. python爬虫——爬取网页数据和解析数据

    1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.只要浏览器能够做的事情,原则上,爬虫都能够做到. 2 ...

  7. 使用python爬虫爬取股票数据

    前言: 编写一个爬虫脚本,用于爬取东方财富网的上海股票代码,并通过爬取百度股票的单个股票数据,将所有上海股票数据爬取下来并保存到本地文件中 系统环境: 64位win10系统,64位python3.6, ...

  8. Python自动化爬取App数据

    基本环境配置 版本:Python3 系统:Windows 需要安装: 1.JDK - Download JDK,Appium要求用户必须配置JAVA环境, 否则启动Seesion报错. 很多人学习py ...

  9. python爬虫----爬取阿里数据银行websocket接口

    业务需求:爬取阿里品牌数据银行的自定义模块==>>>人群透视==>>>查看报告==>>数据 发现:数据通过websocket接口传递,此类型接口的详细理 ...

随机推荐

  1. 聊一聊 Spring Boot 中 RESTful 接口设计规范

    在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则.接口单一原则.接口过滤和接口组合等诸多因素,本篇文章将简要分 ...

  2. [INS-32033] Central Inventory location is not writable

    这个是因为之前安装过一次图形界面,已经创建过Inventory,所以会报错. 解决:删除oraInventory这个目录.

  3. Task异常捕获的方式

    这节来讲一下如果捕获Task的异常. 当Task运行中出现了异常,正常情况下我们在主线程的Try是捕获不到的,而如果在Task内部写try,出现了异常我们会完全不知道.下面就来介绍几个主线程捕获Tas ...

  4. CosId 1.0.3 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

  5. 重新点亮linux 命令树————帮助命令[一]

    前言 重新整理一下linux的命令. 正文 这里首先介绍帮助命令. 帮助命令常用的有三个: man help info 那么就来看下这三个. man 第一个man,man不是男人的意思,而是manua ...

  6. .net core 支付宝,微信支付 三

    支付回调: 获取HttpRequest的body内容,之前使用Request.Form有时候数据请求不到(可能是跟.net core 版本有关?) var s = HttpRequest.Body; ...

  7. Zabbix5.0Yum安装

    1.1.操作系统配置: 1.操作系统属性(虚拟机下环境): (1)操作系统版本: [root@localhost ~]# cat /etc/redhat-release CentOS Linux re ...

  8. 98、配置ftp服务器(vsftpd)

    98.1.安装vsftpd: 1.安装: [root@m01 ~]# yum install -y vsftpd #安装vsftpd [root@m01 ~]# vsftpd -v #查看ftp的版本 ...

  9. 揭开Docker的面纱

    开新坑了,开始挖坑Docker了,兄弟们.为什么需要Docker呢?Docker是什么?这里开始揭开Docker的面纱. 一.为什么需要Docker 可能每个开发人员都有一种困扰,软件开发完之后部署项 ...

  10. WEB应用访问缓慢的问题定位

    WEB应用访问缓慢的问题定位 欢迎关注博主公众号「java大师」, 专注于分享Java领域干货文章, 关注回复「资源」, 免费领取全网最热的Java架构师学习PDF, 转载请注明出处 http://w ...