python3怎么做爬虫_Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照...
爬取背景
這套課程雖然叫爬蟲(chóng)入門(mén)類(lèi)課程,但是里面涉及到的點(diǎn)是非常多,十分檢驗(yàn)?zāi)愕幕A(chǔ)掌握的牢固程度,代碼中的很多地方都是可以細(xì)細(xì)品味的。
為什么要寫(xiě)這么一個(gè)小東東呢,因?yàn)槲疑钤诖蠛颖?#xff0c;那霧霾醇厚的很,去了趟三亞,那空氣,嘖嘖,舒服的很,所以爬取一下三亞天氣,看看什么時(shí)候去最好,理想的溫度為24~28,呵呵噠
代碼走起來(lái) ,天氣類(lèi)的網(wǎng)址多的很,重點(diǎn)關(guān)注歷史天氣
找到這么一個(gè)網(wǎng)站 https://www.tianqi.com/sanya/
發(fā)現(xiàn)入口,哈哈,有機(jī)會(huì)爬取到
代碼走起來(lái),爬蟲(chóng)套路上吧
簡(jiǎn)單的requests,復(fù)雜的scrapy 總有一款適合你的
哇哦~從2011年到2019年都有唉
月份點(diǎn)進(jìn)去,呈現(xiàn)了大概這些信息,最高氣溫,最低氣溫,天氣,風(fēng)向,風(fēng)力,好了數(shù)據(jù)都有了
http://lishi.tianqi.com/sanya/201101.html
到這個(gè)地方不著急,慢慢來(lái),一個(gè)天天寫(xiě)爬蟲(chóng)的人必須要對(duì)URL敏感,一看就嗨,小時(shí)候喜歡找規(guī)律的人長(zhǎng)大都能寫(xiě)爬蟲(chóng)
OK,這就簡(jiǎn)單了,走起,看起來(lái)就簡(jiǎn)單,那我就使用pyspider了 ,好久沒(méi)有,都有點(diǎn)遺忘了呢
怎么運(yùn)行呢?
一頓操作,數(shù)據(jù)就下載到了
沒(méi)有特別復(fù)雜的地方,基本就屬于常規(guī)操作了
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
基本數(shù)據(jù)分析
首先看一下數(shù)據(jù)的基本面
75% 都是26度的天氣,很舒服
都發(fā)現(xiàn)了異常數(shù)據(jù),例如最低氣溫最小的竟然為0,最高氣溫為13,不合理
最熱竟然是37度,還不如我大河北溫度,奇怪了?
excel 讀取
def read_xlsx():
df = pd.read_excel("天氣數(shù)據(jù).xlsx",names =["cold","date","hot","weather","wind","wind_s"])
return df
我要知道,三亞天氣的一個(gè)走勢(shì),這個(gè)地方直接按照時(shí)間進(jìn)行圖標(biāo)制作吧
按照時(shí)間排序
df = read_xlsx()
opt_df = df[['date','cold','hot']]
opt_df = opt_df.sort_values(by='date')
可以明顯的看到波峰和波谷,這個(gè)地方只能知道三亞的天氣是有波動(dòng)的,距離我得到最后的結(jié)果進(jìn)了一點(diǎn)點(diǎn)
按照單獨(dú)的一年繪制,得到一個(gè)很混亂的圖,還是沒(méi)有得到我想要的結(jié)果
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()
每個(gè)顏色表示不同的年分,看來(lái)還是要用子圖了。
從上到下,我從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()
一個(gè)小的注意事項(xiàng)是:解決使用 plt.savefig 保存圖片時(shí)一片空白
原因
其實(shí)產(chǎn)生這個(gè)現(xiàn)象的原因很簡(jiǎn)單:在 plt.show() 后調(diào)用了 plt.savefig() ,在 plt.show() 后實(shí)際上已經(jīng)創(chuàng)建了一個(gè)新的空白的圖片(坐標(biāo)軸),這時(shí)候你再 plt.savefig() 就會(huì)保存這個(gè)新生成的空白圖片。
知道了原因,就不難知道解決辦法了,解決辦法有兩種:
在 plt.show() 之前調(diào)用 plt.savefig();
import matplotlib.pyplot as plt
""" 一些畫(huà)圖代碼 """
plt.savefig("filename.png")
plt.show()
畫(huà)圖的時(shí)候獲取當(dāng)前圖像(這一點(diǎn)非常類(lèi)似于 Matlab 的句柄的概念):
# gcf: Get Current Figure
fig = plt.gcf()
plt.show()
fig1.savefig('tessstttyyy.png', dpi=100)
細(xì)細(xì)的看了一下,發(fā)現(xiàn)好穩(wěn)定。。。。走勢(shì)變化不大,那么,在去細(xì)化,我們拆解2018年的,然后推斷2019年的,這個(gè)地方需要的展示12個(gè)月份的天氣了,代碼走起。
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()
哈哈,到現(xiàn)在為止,啥也沒(méi)看出來(lái)
繼續(xù)努力,看平均天氣,把2018年每個(gè)月的平均天氣整理出來(lái)
月份
最低氣溫
最高氣溫
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
哈哈哈,都是好天氣......我到底在做啥結(jié)果.....
受不了,我去百度了,看看天氣網(wǎng)站的結(jié)論,emmm....一樣,在我們河北人看來(lái),這就是恒溫的。
我還有的分析,我的數(shù)據(jù)是這樣子的
是否下雨,我可以統(tǒng)計(jì)一下,代碼走起來(lái)
全年的天氣
天氣
天數(shù)
中雨
15
多云
176
大雨
5
小雨
5
晴
12
暴雨
1
陰
11
陣雨
38
雷陣雨
6
統(tǒng)計(jì)一下每個(gè)月的天氣變化
總結(jié),兩個(gè)結(jié)論,666
1月,2月,3月,11月,12月基本沒(méi)雨
其他月份有雨
好吧,停止了,好像沒(méi)得到啥數(shù)據(jù),就是1月,2月,3月,11月,12月去三亞吧,這幾個(gè)月份中3月份和11月份機(jī)票最便宜,看來(lái)我要寫(xiě)爬取機(jī)票的博客了
總結(jié)
以上是生活随笔為你收集整理的python3怎么做爬虫_Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PHP8编译swoole出错,swool
- 下一篇: python ini文件删除修改_如何在