Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照
爬取背景
这套课程虽然叫爬虫入门类课程,但是里面涉及到的点是非常多,十分检验你的基础掌握的牢固程度,代码中的很多地方都是可以细细品味的。
为什么要写这么一个小东东呢,因为我生活在大河北,那雾霾醇厚的很,去了趟三亚,那空气,啧啧,舒服的很,所以爬取一下三亚天气,看看什么时候去最好,理想的温度为24~28,呵呵哒
代码走起来 ,天气类的网址多的很,重点关注历史天气
找到这么一个网站 https://www.tianqi.com/sanya/
发现入口,哈哈,有机会爬取到
代码走起来,爬虫套路上吧
简单的requests,复杂的scrapy 总有一款适合你的
哇哦~从2011年到2019年都有唉
月份点进去,呈现了大概这些信息,最高气温,最低气温,天气,风向,风力,好了数据都有了
http://lishi.tianqi.com/sanya/201101.html
到这个地方不着急,慢慢来,一个天天写爬虫的人必须要对URL敏感,一看就嗨,小时候喜欢找规律的人长大都能写爬虫
URL 是这样子的
http://lishi.tianqi.com/sanya/201111.html
http://lishi.tianqi.com/sanya/201102.html
http://lishi.tianqi.com/sanya/201103.html
http://lishi.tianqi.com/sanya/201104.html
http://lishi.tianqi.com/[三亚的拼音]/年月.html
OK,这就简单了,走起,看起来就简单,那我就使用pyspider了 ,好久没有,都有点遗忘了呢
怎么运行呢?
一顿操作,数据就下载到了
没有特别复杂的地方,基本就属于常规操作了
def __init__(self):
self._city = "sanya"
def get_date_list(self,begin,end):
date_list = [x.strftime("%Y%m") for x in list(pd.date_range(start=begin,end=end,freq="M"))]
return date_list
@every(minutes=24 * 60)
def on_start(self):
# 我需要生成201101~201812的所有链接
date_list = self.get_date_list("2011-01-01","2019-01-01")
for item in date_list:
self.crawl('http://lishi.tianqi.com/%s/%s.html' %(self._city,item) , callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
items = []
for each in response.doc('.tqtongji2 > ul:not(.t1)').items():
date = each("li:eq(0)").text()
hot = each("li:eq(1)").text()
cold = each("li:eq(2)").text()
weather = each("li:eq(3)").text()
wind_direction = each("li:eq(4)").text()
wind_power = each("li:eq(5)").text()
item = {
"date":date,
"hot":hot,
"cold":cold,
"weather":weather,
"wind_direction":wind_direction,
"wind_power":wind_power}
items.append(item)
return items
基本数据分析
首先看一下数据的基本面
- 75% 都是26度的天气,很舒服
- 都发现了异常数据,例如最低气温最小的竟然为0,最高气温为13,不合理
- 最热竟然是37度,还不如我大河北温度,奇怪了?
excel 读取
def read_xlsx():
df = pd.read_excel("天气数据.xlsx",names =["cold","date","hot","weather","wind","wind_s"])
return df
我要知道,三亚天气的一个走势,这个地方直接按照时间进行图标制作吧
按照时间排序
df = read_xlsx()
opt_df = df[['date','cold','hot']]
opt_df = opt_df.sort_values(by='date')
可以明显的看到波峰和波谷,这个地方只能知道三亚的天气是有波动的,距离我得到最后的结果进了一点点
按照单独的一年绘制,得到一个很混乱的图,还是没有得到我想要的结果
opt_df = opt_df.set_index("date")
for i in range(2011,2019):
data = opt_df[str(i)]
plt.plot(range(1,len(data)+1), data['cold'])
plt.show()
每个颜色表示不同的年分,看来还是要用子图了。
从上到下,我从2011年依次罗列到2018年
opt_df = opt_df.set_index("date")
for i in range(2011,2019):
data = opt_df[str(i)]
plt.subplot(8,1,i-2010)
plt.grid(True)
plt.plot(range(1,len(data)+1), data['cold'])
plt.plot(range(1, len(data) + 1), data['hot'])
plt.title(str(i)+u"年,温度曲线")
plt.tight_layout()
plt.savefig("filename.png")
plt.show()
一个小的注意事项是:解决使用 plt.savefig 保存图片时一片空白
原因
其实产生这个现象的原因很简单:在 plt.show() 后调用了 plt.savefig() ,在 plt.show() 后实际上已经创建了一个新的空白的图片(坐标轴),这时候你再 plt.savefig() 就会保存这个新生成的空白图片。
知道了原因,就不难知道解决办法了,解决办法有两种:
在 plt.show() 之前调用 plt.savefig();
import matplotlib.pyplot as plt
""" 一些画图代码 """
plt.savefig("filename.png")
plt.show()
画图的时候获取当前图像(这一点非常类似于 Matlab 的句柄的概念):
# gcf: Get Current Figure
fig = plt.gcf()
plt.show()
fig1.savefig('tessstttyyy.png', dpi=100)
细细的看了一下,发现好稳定。。。。走势变化不大,那么,在去细化,我们拆解2018年的,然后推断2019年的,这个地方需要的展示12个月份的天气了,代码走起。
d2018 = opt_df["2018"]
print(d2018)
for i in range(1,13):
data = opt_df["2018-"+str(i)]
plt.subplot(12, 1, i)
plt.grid(True)
plt.plot(range(1, len(data) + 1), data['cold'])
plt.plot(range(1, len(data) + 1), data['hot'])
plt.title(str(i) + u"月,温度曲线")
plt.yticks([0,5,10,15,20,25,30,35,40])
plt.xticks(range(1,32))
plt.tight_layout()
plt.savefig("filename.png")
plt.show()
哈哈,到现在为止,啥也没看出来
继续努力,看平均天气,把2018年每个月的平均天气整理出来
| 月份 | 最低气温 | 最高气温 |
|---|---|---|
| 1 | 20.1 | 26.1 |
| 2 | 17.6 | 26.6 |
| 3 | 19.6 | 29.3 |
| 4 | 22.0 | 30.7 |
| 6 | 25.2 | 32.5 |
| 7 | 24.5 | 31.4 |
| 8 | 24.5 | 31.8 |
| 9 | 25.2 | 31.9 |
| 10 | 23.2 | 31.5 |
| 11 | 21.7 | 30.2 |
| 12 | 20.4 | 28.1 |
哈哈哈,都是好天气......我到底在做啥结果.....
受不了,我去百度了,看看天气网站的结论,emmm....一样,在我们河北人看来,这就是恒温的。
我还有的分析,我的数据是这样子的
是否下雨,我可以统计一下,代码走起来
全年的天气
| 天气 | 天数 |
|---|---|
| 中雨 | 15 |
| 多云 | 176 |
| 大雨 | 5 |
| 小雨 | 5 |
| 晴 | 12 |
| 暴雨 | 1 |
| 阴 | 11 |
| 阵雨 | 38 |
| 雷阵雨 | 6 |
统计一下每个月的天气变化
总结,两个结论,666
- 1月,2月,3月,11月,12月基本没雨
- 其他月份有雨
好吧,停止了,好像没得到啥数据,就是1月,2月,3月,11月,12月去三亚吧,这几个月份中3月份和11月份机票最便宜,看来我要写爬取机票的博客了
Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照的更多相关文章
- Python爬虫入门教程 61-100 写个爬虫碰到反爬了,动手破坏它!
python3爬虫遇到了反爬 当你兴冲冲的打开一个网页,发现里面的资源好棒,能批量下载就好了,然后感谢写个爬虫down一下,结果,一顿操作之后,发现网站竟然有反爬措施,尴尬了. 接下来的几篇文章,我们 ...
- Python爬虫入门教程 37-100 云沃客项目外包网数据爬虫 scrapy
爬前叨叨 2019年开始了,今年计划写一整年的博客呢~,第一篇博客写一下 一个外包网站的爬虫,万一你从这个外包网站弄点外快呢,呵呵哒 数据分析 官方网址为 https://www.clouderwor ...
- Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分
1. 爬取前的分析 mitmdump是mitmproxy的命令行接口,比Fiddler.Charles等工具方便的地方是它可以对接Python脚本. 有了它我们可以不用手动截获和分析HTTP请求和响应 ...
- Python爬虫入门教程 43-100 百思不得姐APP数据-手机APP爬虫部分
1. Python爬虫入门教程 爬取背景 2019年1月10日深夜,打开了百思不得姐APP,想了一下是否可以爬呢?不自觉的安装到了夜神模拟器里面.这个APP还是比较有名和有意思的. 下面是百思不得姐的 ...
- Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy
爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...
- 2019-03-22 Python Scrapy 入门教程 笔记
Python Scrapy 入门教程 入门教程笔记: # 创建mySpider scrapy startproject mySpider # 创建itcast.py cd C:\Users\theDa ...
- Python学习入门教程,字符串函数扩充详解
因有用户反映,在基础文章对字符串函数的讲解太过少,故写一篇文章详细讲解一下常用字符串函数.本文章是对:程序员带你十天快速入门Python,玩转电脑软件开发(三)中字符串函数的详解与扩充. 如果您想学习 ...
- Python基础入门教程
Python基础入门教程 Python基础教程 Python 简介 Python环境搭建 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循 ...
- Python爬虫入门教程 2-100 妹子图网站爬取
妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...
随机推荐
- NSURLSession 所有的都在这里(一)
这篇文章会有什么? 在这篇文章中把NSURLSession.h文件集体梳理一遍,把里面的每个属性.代理和方法都拿出来说说,通过这篇文章我相信对于NSURLSession这一块的东西会梳理的比较全面一点 ...
- 第三次 orm自动建表及遇到的问题
Hibernate支持自动建表,在开发阶段很方便,可以保证hbm与数据库表结构的自动同步. 方法很简单,在hibernate.cfg.xml内加入 <property name="hi ...
- 在线引用js资源积累
[jQuery]https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js[Vue]https://cdnjs.cloudfla ...
- 关于office在卸载了某一应用之后无法试图使用的功能所在的网络位置
我出现这个问题是在卸载了某一个微软的办公软件之后,所有的办公软件都会产生这个问题. 处理的方法是将之前的安装包解压,然后找到所出现的msi文件,点击确定就ok了. 所以说,安装文件最好还是放在一个地方 ...
- Composer基本安装步骤
Composer是 PHP 世界里用于管理项目依赖的工具. 1,确保安装PHP,检查方法命令行窗口执行php -v,查看是否正常输出版本 php -v 2,下载安装脚本composer-setup.p ...
- spring security oauth2
https://connect.qq.com/manage.html#/ http://wiki.connect.qq.com/%E7%BD%91%E7%AB%99%E5%BA%94%E7%94%A8 ...
- 运维监控利器Nagios之:nagios配置详解
http://ixdba.blog.51cto.com/2895551/752870 一.nagios配置过程详解 1.nagios默认配置文件介绍 nagios安装完毕后,默认的配置文件在/usr ...
- 20.如何从app业务逻辑提炼api接口
在app后端的工作中,设计api是一个很考验设计能力的工作.在项目的初始阶段,只知道具体的业务逻辑,那怎么把业务逻辑抽象和提炼,设计出api呢?通过阅读本文,可解答以上疑惑. 在本文中,是用以前做过的 ...
- Requests库作者另一神器Pipenv的用法
前言 我们在运行 Python 项目的时候经常会遇到一些版本问题,例如 A 项目依赖于 Django 1.5,而 B 项目又依赖 Django 2.0,而我们的系统却只有一个 Python 解释器,我 ...
- User Profile Service服务未能登录,无法登录
不知你是否遇到这样的问题,某一天你打开PC,开机正常,可当你输入正确的密码回车,却发现Vista或Win7拒绝让你登录,提示"User Profile Service 服务未能登录.无法加载 ...