有了它,你就是天气历史库。
创作立场声明:本文所展示代码为自行编写。特别鸣谢www.tianqi.com提供数据支持,如有违规侵权,本人会在收到通知的第一时间进行删除,代码仅供学习参考,禁做它用。
1、需求的诞生
LD:'小X,在不?国庆去哪儿玩呀?'
小X:'玩啥玩,回家呆着去。'
LD:'也不知道天气怎么样,要不要带两(ni)件(bang)外(wo)套(kan)回(kan)去(ba)呀.'
小X:'.....'
2、摸鱼的日常
既然领导都发话了,闲着也是闲着,不如搞一搞。
作为社畜的小X它熟练的打开了百度想来CV一下,但当他一顿操作下来,发现好像还没有的提过这种奇怪的需求
随即创建了一个短命的小脚本,真·阅后即焚的程度(我觉得吧,这个词用的可能有点不太恰当)
3、废话说话,上代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pandas as pd
from lxml import etree
from requests import get
from threading import Thread
# 定义请求头
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0'
# 定义数据暂存池
data = [[]for i in range(5)]
# 无情的解析器,获取基本数据
def jiexi(u):
date = u.xpath('div[1]/text()')[0][0:10]
zg = u.xpath('div[2]/text()')[0]
zd = u.xpath('div[3]/text()')[0]
tq = u.xpath('div[4]/text()')[0]
fs = u.xpath('div[5]/text()')[0]
data[0].append(date)
data[1].append(zg)
data[2].append(zd)
data[3].append(tq)
data[4].append(fs)
# 残忍的构造器,给解析器下任务
def gouzao(diming,year,day):
for y in year:
rs = get(f'https://lishi.tianqi.com/{diming}/{y}10.html',headers=headers)
html = etree.HTML(rs.content)
ul = html.xpath("//ul[@class='thrui']/li")[0:day]
thread_list = []
for u in ul:
t1 = Thread(target=jiexi, args=(u,))
t1.start()
thread_list.append(t1)
for t in thread_list:
t.join()
df =pd.DataFrame(data).T
df.columns = ['日期','最高温','最低温','天气','风速']
return df
if __name__ == '__main__':
# 你想查询哪些年份
year = ['2020','2019','2018','2017','2016','2015','2014','2013','2012','2011']
# 你想查询多少天的数据(默认1号起)
day = 8
# 你想查询哪儿的天气
diqu = 'nanxian'
# 来吧,宝贝
df = gouzao(diqu,year,day)
df.to_csv(r'.weather.csv',encoding='utf-8_sig',index=False)
4、结尾的碎碎念
作为一个小数据工作者,其实拿到这部分数据还是想着做一些可视化的图表出来的,奈何不住我太懒了,就随便套了俩图,希望值友有兴趣能够完善下展示面,共同交流学习呀。
小小飞行家
校验提示文案
kxbs
校验提示文案
kxbs
校验提示文案
小小飞行家
校验提示文案