第一部分:爬取天气数据

# 在函数调用 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. SpringCloud 面试题 (持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  2. 关于MySQL索引面试题的六连炮!招架的住吗?

    1.面试真题 MySQ索引的原理和数据结构能介绍一下吗? b+树和b-树有什么区别? MySQL聚簇索引和非聚簇索引的区别是什么? 他们分别是如何存储的? 使用MySQL索引都有哪些原则? MySQL ...

  3. 【数论】8.30题解-prime素数密度 洛谷p1835

    prime 洛谷p1835 题目描述 给定区间[L, R](L <= R <= 2147483647, R-L <= 1000000),请计算区间中 素数的个数. 输入输出 输入 两 ...

  4. NOIP模拟测试23「mine·water·gcd」

    mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...

  5. [.NET大牛之路 001] .NET 其名

    本文来自『.NET大牛之路』星球的分享 大家好,这是 .NET 大牛这路的第 1 篇文章.大家期待已久的课程今天正式开始了.既然我们整个体系课程都将围绕 .NET 展开,那我们今天就先聊一聊 .NET ...

  6. 开关电源(1)之BUCK降压变换器工作原理及Multisim实例仿真

    开关电源(Switching  Mode  Power  Supply)即开关稳压电源,是相对于线性稳压电源的一种的新型稳压电源电路,它通过对输出电压实时监测并动态控制开关管导通与断开的时间比值来稳定 ...

  7. ffmpeg入门到实战-ffmpeg是怎么转码的?

    阅读目录 视频是怎么被播放的? ffmpeg命令的格式 ffmpeg转码输出的过程 视频是怎么被播放的? 我们知道,当下大多数播放器都是基于ffmpeg二次开发的.你有没有想过,你用播放器打开一个视频 ...

  8. ZooKeeper集群解析

    ZooKeeper集群解析. 这篇文章中来介绍一下 ZooKeeper 相关的集群角色,还有 ZAB协议,集群的安装在 ZooKeeper入门 中有介绍. 一.ZooKeeper集群中的角色 Lead ...

  9. This application failed to start because no Qt platform plugin could be initialized

    今天在直接运行QT生成的.exe遇到了一个错误:This application failed to start because no Qt platform plugin could be init ...

  10. Java中的自增自减

    情况①: for (int i = 0; i < 100; i++) { j = 1 + j++; } System.out.println(j); 结果是 0 !! 这是由于在进行后自增/自减 ...