python3怎么做爬虫_Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照...

爬取背景

这套课程虽然叫爬虫入门类课程,但是里面涉及到的点是非常多,十分检验你的基础掌握的牢固程度,代码中的很多地方都是可以细细品味的。

为什么要写这么一个小东东呢,因为我生活在大河北,那雾霾醇厚的很,去了趟三亚,那空气,啧啧,舒服的很,所以爬取一下三亚天气,看看什么时候去最好,理想的温度为24~28,呵呵哒

代码走起来 ,天气类的网址多的很,重点关注历史天气

找到这么一个网站 https://www.tianqi.com/sanya/

1699da7fc34fe9ef?w=518&h=301&f=png&s=60396

发现入口,哈哈,有机会爬取到

代码走起来,爬虫套路上吧

简单的requests,复杂的scrapy 总有一款适合你的

哇哦~从2011年到2019年都有唉

1699da7fc3717fea?w=689&h=555&f=png&s=81231

月份点进去,呈现了大概这些信息,最高气温,最低气温,天气,风向,风力,好了数据都有了

http://lishi.tianqi.com/sanya/201101.html

1699da7fc36c46ac?w=701&h=640&f=png&s=85871

到这个地方不着急,慢慢来,一个天天写爬虫的人必须要对URL敏感,一看就嗨,小时候喜欢找规律的人长大都能写爬虫

OK,这就简单了,走起,看起来就简单,那我就使用pyspider了 ,好久没有,都有点遗忘了呢

怎么运行呢?

1699da7fc3e322dc?w=500&h=330&f=png&s=273488

一顿操作,数据就下载到了

没有特别复杂的地方,基本就属于常规操作了

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

基本数据分析

首先看一下数据的基本面

1699da7fc397f32e?w=221&h=193&f=png&s=8937

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')

可以明显的看到波峰和波谷,这个地方只能知道三亚的天气是有波动的,距离我得到最后的结果进了一点点

1699da7fc38103f6?w=1221&h=606&f=png&s=154318

按照单独的一年绘制,得到一个很混乱的图,还是没有得到我想要的结果

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()

每个颜色表示不同的年分,看来还是要用子图了。

1699da7ff1db89ac?w=1329&h=663&f=png&s=243867

从上到下,我从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)

1699da7feb18d4b8?w=2000&h=1800&f=png&s=584289

细细的看了一下,发现好稳定。。。。走势变化不大,那么,在去细化,我们拆解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()

1699da7ff23e96af?w=2000&h=1800&f=png&s=457396

哈哈,到现在为止,啥也没看出来

1699da7ff5ae84e3?w=137&h=161&f=png&s=29732

继续努力,看平均天气,把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

哈哈哈,都是好天气......我到底在做啥结果.....

1699da7ffb08cc45?w=164&h=188&f=png&s=38718

受不了,我去百度了,看看天气网站的结论,emmm....一样,在我们河北人看来,这就是恒温的。

1699da7ff917237c?w=817&h=458&f=png&s=55272

我还有的分析,我的数据是这样子的

1699da8016e719cd?w=624&h=254&f=png&s=21537

是否下雨,我可以统计一下,代码走起来

全年的天气

天气

天数

中雨

15

多云

176

大雨

5

小雨

5

12

暴雨

1

11

阵雨

38

雷阵雨

6

统计一下每个月的天气变化

1699da801c7a5675?w=995&h=559&f=png&s=35953

总结,两个结论,666

1月,2月,3月,11月,12月基本没雨

其他月份有雨

好吧,停止了,好像没得到啥数据,就是1月,2月,3月,11月,12月去三亚吧,这几个月份中3月份和11月份机票最便宜,看来我要写爬取机票的博客了

1699da801e27f513?w=198&h=183&f=png&s=36019

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仙逆网页服务器失败,全民仙逆闪退进不去了怎么办 闪退解决办法汇总

相信喜欢玩手机游戏的玩家们在玩游戏的过程中或多或少都会碰到闪退或者登陆不上游戏的情况吧,全民仙逆也自然不例外,所以今天热心的一游网小编就来告诉大家全民仙逆闪退进不去了怎么办 闪退解决办法汇总。全民仙逆进不去,全民仙逆无法连接服务…

mysql的主从复制优缺点_MySQL主从复制原理,超级详细的总结,看完全通了

主从复制的方式主从复制分为:异步复制,半同步复制和全同步复制异步复制: 是MySQL默认的复制模式,主库在执行完客户端提交的事务之后会立刻将结果返回给客户端,并不关心从库接收的结果,这样就会导致当主数据…

canvas 插件_基于Angular的Canvas手写签名插件

灵感来源之前, 在轻流的业务中遇到了一个需求, 是能够让客户使用手写签名的功能. 签名演示问题来了, 这...我不会啊! 这得是Canvas了吧. 正所谓, 插件用的好, 下班走的早. 于是我就开始找插件了. 找到了一个ng生态的插件, 名字不记得了, 只记得他就一个核心文件, 封装了一个第三…

配置DNS服务器的需要修改的配置文件为,dns服务器配置教程

在WIN2003怎么安装部署DNS服务器(DNS服务是全称 域名服务器,是把域名地址主机名解析到网络地址的一项服务).下面是学习啦小编收集整理的dns服务器配置教程,希望对大家有帮助~~dns服务器配置教程工具/原料WIN2003 DNS组件 操作系统光盘安装添加DNS服务器角…

php源码怎样安装mysql_安装MySQL

三、mysql的安装,与php、Apache相结合打开下载的文件,双击运行,出现如下界面。mysql安装向导启动,按“Next”继续。选择安装类型,有“Typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项&#xff0…

python循环经典例题_python练习题:循环打印嵌套列表

好久没写博文了,添加一个练习题,选自《head_first_python》~~ python列表:以中括号开始和结束"[]";列表项以逗号","分隔开,使用赋值操作符""赋予一个标识符。如:…

开发测试服务器配置信息,node服务端中台实现及开发测试生产环境配置

本人node服务端新人一枚,网上找了不少资料,看了很多别人的配置信息,感觉都不是很合适,看的多了自己也明白配置的具体思路跟实现方式了,以下为我的实现方式。通过package.json里面的scripts配置命令行信息,然…

mysql数字前面有0_Mysql中前边有0的数据,0会被舍去的问题

最近由于项目的需求,需要频繁地拉取不同数据库中的数据,拉取数据的过程中,各种问题,十分悲催,真所谓,一个疏忽,你就要被推倒重来...在经历了无数次被推倒又站起来,然后又被推倒的艰苦…

狸窝音频剪辑软件_「附下载链接」常用的5款视频格式转换软件,收藏起来吧...

日常生活中,大家可能会自己制作一些记录生活的小视频,或者作为爱好上传到视频平台,就会用到很多种的视频格式,比如MP4、MKV、WMV、FLV、MOV、DV等等。因为有的视频网站需要特殊格式的视频才能上传,或者因为视频体积太大…

mysql 触发器 运算符_mysql三元运算,上下连表,视图,触发器,存储过程,事务等不常用方法...

1 MySql中的三元运算符有两种方法:1、case when 条件 then (条件为true时执行) else(条件为false时执行) end;/*end不可少*/2、select *,if(expr1,expr2,expr3) from 表名;实例:SELECT if(isnull(sum(c.MONEY)),0,sum(c.MONEY)) AS m1 FROM Table2 上下连…

求字典key的和python_python怎么将字典key相同的value值, 合并

python怎么将字典key相同的value值, 以逗号隔开,整为一行数据 源数据: test_dict1 {text: 50.00€ Rabatt fr Bestellungen ber 10.00€, strong_off: 50.00€, html_text: 50.00€ Rabatt fr Bestellungen ber 10.00€} test_dict2 {text:…

简单的mysql左链接_简单谈谈mysql左连接内连接

前言最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写业务: sql语句统计出入库数据。问题:只统计了X端入库单。原因: 没有发现X端的数据…

c语言 空格_C语言100题集合-ex003

系列文章《C语言经典100例》持续创作中,欢迎大家的关注和支持。喜欢的同学记得点赞收藏哦~1 题目函数:fun() 功能:统计一行字符串单词的个数,作为函数值返回描述:一行字符串在主函数中输入,规定…

go 默认http版本_【每日一库】超赞的 Go 语言 INI 文件操作

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言如果你使用 INI 作为系统的配置文件,那么一定会使用这个库吧。没错,它就是号称地表 最强大、最方便 和 最流行 的 Go 语言 INI 文件操作库:https:…

python程序设计第一章答案_Python《学习手册:第一章-习题》

人们选择Python的六大主要原因是什么? 软件质量:Python注重可读性、一致性和软件质量。Python代码的设计致力于可读性,因此具备了比传统脚本语言更优秀的可重用性和可维护性。 Python的一致性保证了其代码易于理解。 Python支持软件开发的高级…

redis数据丢失_有效避免数据丢失!Redis持久化方案选择详解

为什么需要持久化呢?通常情况下redis的数据全部存储在内存中,数据库一旦故障发生重启数据会全部丢失,即使是在redis cluster或者redis sentinel模式下主从同步数据的恢复仍然需要一段时间。持久化功能在于能够有效地避免因进程退出造成的数据丢失问题&am…

做python开发要用多大的内存_Python 在分配内存需要考虑的问题

由此能看出可变对象在扩充时的秘密:超额分配机制:申请新内存时并不是按需分配的,而是多分配一些,因此当再添加少量元素时,不需要马上去申请新内存 非均匀分配机制:三类对象申请新内存的频率是不同的&#x…

mysql审计 社区版有吗_mysql 5.6 社区版上审计功能,不扯皮

官网https://mariadb.com/kb/en/mariadb/about-the-mariadb-audit-plugin/一、环境说明MySQL 5.6.25 社区版Mariadb 10.0.25 社区版mysql 企业版有审计功能需要收费,社区版被阉割的不行不行了,和古时候的太监没啥区别了,比较重要的功能特性都…

python用outlook自动发邮件_Python 调用outlook发送邮件(转 )

单账号: import win32com.client as win32 def send_mail(): outlook win32.Dispatch(Outlook.Application) mail_item outlook.CreateItem(0) # 0: olMailItem mail_item.Recipients.Add(testtest.com) mail_item.Subject Mail Test mail_item.BodyFormat 2 # …

win10子系统ubuntu图形界面_win10系统中安装ubuntu子系统及图形界面

作为全球最流行且最有影响力的Linux开源系统之一,Ubuntu自发布以来在应用体验方面:有较大幅度的提升,即使对比Windows、MacoS等操作系统,最新版本的Ubuntu也不逊色。下面教大家在win10系统中安装ubuntu子系统及图形界面。第一步&a…