爬虫

网址链接:历史天气查询|历史天气预报查询|历史气温查询|过去天气查询_历史天气查询网

import requests
from lxml import etree
import pandas as pdheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.68'
}# 获取所有2021年12个月的url链接
def get_url_list(s_page, e_page):url_list = []for i in range(s_page, e_page):if i < 10:url_list.append('https://lishi.tianqi.com/rizhao/2021{}.html'.format('0' + str(i)))else:url_list.append('https://lishi.tianqi.com/rizhao/2021{}.html'.format(str(i)))return url_list# 解析获取url数据,并解析
def parse_datas(url):response = requests.get(url, headers=headers)html = etree.HTML(response.text)t_list = html.xpath('/html/body/div[7]/div[1]/div[4]/ul/li')datas = []for li in t_list:data = li.xpath('./div/text()')datas.append(data)return datas# 合并每一页url获取的数据
def temp_datas(s_page, e_page):url_list = get_url_list(s_page, e_page)c_datas = []for url in url_list:c_datas.extend(parse_datas(url))return c_datasif __name__ == '__main__':datas = pd.DataFrame(temp_datas(s_page=1, e_page=13),columns=['date', 'h_temp', 'l_temp', 'weather', 'w_d'])print(datas)datas.to_csv(r'rizhao_weather.csv', index=None)

可视化

import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Timeline, Page, Pie, Griddatas = pd.read_csv('rizhao_weather.csv')#数据处理
datas.date = datas.date.str.split(' ', expand=True)[0]
datas.h_temp = datas.h_temp.str.split('℃', expand=True)[0].astype(np.float)
datas.l_temp = datas.l_temp.str.split('℃', expand=True)[0].astype(np.float)
datas['w_d0'] = datas['w_d'].str.split(' ', expand=True)[0]
datas['w_d1'] = datas['w_d'].str.split(' ', expand=True)[1]
datas['month'] = datas.date.apply(lambda x: x.split('-')[1])
datas['deltaT'] = datas.h_temp - datas.l_temp
datas['averageT'] = (datas.h_temp + datas.l_temp) / 2def t_line(datas, city):'''绘制折线轮播图'''t2 = Timeline()for i in datas.month.unique():data = datas[datas.month == i]line = Line()line.add_xaxis(data['date'].tolist())#最高气温折线line.add_yaxis('最高气温', data['h_temp'].tolist(),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_='max', name='最大值'),]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average', name='平均值')]))#最低气温折线line.add_yaxis('最低气温', data['l_temp'].tolist(),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_='min', name='最小值'),]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average', name='平均值')]))#最高温与最低温的差值line.add_yaxis('最高温-最低温', data['deltaT'].tolist(),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_='max', name='最大值'),opts.MarkPointItem(type_='min', name='最小值'),]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_='average', name='平均值')]))line.set_global_opts(title_opts=opts.TitleOpts(title="{}月份的气温变化(℃)".format(i), subtitle=city),toolbox_opts=opts.ToolboxOpts(is_show=True),xaxis_opts=opts.AxisOpts(type_='category'))t2.add(line, '{}月'.format(i))return t2def t_pie(datas, city):"""绘制饼型轮播图"""tp = Timeline()for i in datas.month.unique():data = datas[datas['month'] == i]weather_datas = data.groupby('weather').size().reset_index()weather_datas = [list(z) for z in zip(weather_datas['weather'], weather_datas[0])]wind_datas = data.groupby('w_d0').size().reset_index()wind_datas = [list(z) for z in zip(wind_datas['w_d0'], wind_datas[0])]#风向情况pie1 = (Pie().add("",wind_datas,radius=["30%", "60%"],center=["75%", "50%"],rosetype="area",).set_global_opts(legend_opts=opts.LegendOpts(is_show=False)))#天气情况pie2 = (Pie().add("",weather_datas,radius=["30%", "60%"],center=["25%", "50%"],rosetype="area").set_global_opts(title_opts=opts.TitleOpts(title="{}月份天气/风向情况".format(i), subtitle=city),legend_opts=opts.LegendOpts(is_show=False)))grid = (Grid().add(pie1, grid_opts=opts.GridOpts(pos_left="55%")).add(pie2, grid_opts=opts.GridOpts(pos_right="55%")))tp.add(grid, '{}月'.format(i))return tpdef bar_plot(datas, city):"""2021年12个月各月的平均气温"""x_list = [i+'月' for i in datas.groupby('month')['averageT'].mean().index]y_list = [round(i, 1) for i in datas.groupby('month')['averageT'].mean().values]bar = Bar()bar.add_xaxis(x_list)bar.add_yaxis('', y_list)bar.set_global_opts(title_opts=opts.TitleOpts(title='各月平均气温(℃)', subtitle=city))return bardef title(city):"""利用Pie模块绘制页面标头"""c = (Pie().set_global_opts(title_opts=opts.TitleOpts(title='2021年{}天气情况分析'.format(city),title_textstyle_opts=opts.TextStyleOpts(font_size=36, color='#000000'),pos_left='center',pos_top='middle')))return ccity='日照'
page = (Page(layout=Page.DraggablePageLayout).add(title(city),bar_plot(datas, city),t_line(datas, city),t_pie(datas, city)))
page.render('test.html')

使用浏览器打开渲染后的 test.html 文件,如果是

page.render()

则默认为 render.html

拖拉/调整图表位置和大小,当调整到一个适合的布局时,点击左上方的 Save Config 按钮

下载 chart_config.json 配置文件,记住json文件的位置

注意: 请注释掉上面的的所有渲染代码,就是下面这些代码。因为 html 已经生成,并不需要再重新渲染一遍。

# page = (
#     Page(layout=Page.DraggablePageLayout)
#         .add(
#             title(city),
#             bar_plot(datas, city),
#             t_line(datas, city),
#             t_pie(datas, city))
#     )
# page.render('test.html')

再次渲染图表并指定其布局配置

test.html:第一步生成的原 html 文件
 C:/Users/LENOVO/Desktop/chart_config.json:第二步下载的配置文件
 new_render.html:新 html 文件路径

def resave_page():#调整页面布局后重新存储生成新页面page = Page()page.save_resize_html(source='test.html', cfg_file=r'C:/Users/LENOVO/Desktop/chart_config.json',dest='new_render.html')if __name__ == '__main__':resave_page()

爬虫天气数据并使用pyecharts可视化相关推荐

  1. 利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图

    1.本章利用python爬取2019-nCoV确诊数据并制作pyecharts可视化地图: 2.主要内容为绘制出中国各省疫情数据,疫情数据从四个维度进行可视化展示:累积确诊人数.现存确诊人数.治愈人数 ...

  2. python爬虫天气数据_python爬虫:天气数据的分析

    就在前几天还是二十多度的舒适温度,今天一下子就变成了个位数,小编已经感受到冬天寒风的无情了.之前对获取天气都是数据上的搜集,做成了一个数据表后,对温度变化的感知并不直观.那么,我们能不能用python ...

  3. python爬虫天气数据_Python爬取真气网天气数据

    使用工具:pycharm,Chrome driver 使用库:selenium 前言: 我们无时无刻不在呼吸着周围的空气, 可身边的空气质量怎样呢? 嗯~~~ 大多数人会沉思一会儿, 最后还是会说:不 ...

  4. 全国24小时降水量pyecharts可视化分析

    全国24小时降水量pyecharts可视化分析 分享一个小案例,爬虫抓取天气预报网站的降水量数据,并利用pyecharts库进行可视化生成动态的热力图.数据获取网站如下所示. http://www.n ...

  5. 【记录爬虫实战过程】入门学习·详细过程·爬取天气信息并通过pyecharts进行可视化展示1

    文章目录 前言 正文 1.导入对应模块 2.确定爬取的网站 3.得到数据 4.数据处理 5.将所得数据写入CSV 完整代码 补充:数据可视化 前言 入门学习这个部分是跟着b站教学视频做的,记录了所有过 ...

  6. python爬虫工资-Python爬虫实战-数据可视化

    本文您将学到的东西包括: scrapy爬虫的设置 requests(一个用来发送HTTP请求的简单库) BeautifulSoup(一个从HTML和XML中解析数据的库) MongoDB的用法 Mon ...

  7. python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例

    本篇文章适用于Python小白的教程篇,如果有哪里不足欢迎指出来,希望对你帮助. 本篇文章用到的模块: requests,re,os,jieba,glob,json,lxml,pyecharts,he ...

  8. Python爬虫+数据分析+数据可视化(分析《雪中悍刀行》弹幕)

    Python爬虫+数据分析+数据可视化(分析<雪中悍刀行>弹幕) 哔哔一下 爬虫部分 代码部分 效果展示 数据可视化 代码展示 效果展示 视频讲解 福利环节 哔哔一下 雪中悍刀行兄弟们都看 ...

  9. Python爬虫实战-数据可视化

    本文您将学到的东西包括: scrapy爬虫的设置 requests(一个用来发送HTTP请求的简单库) BeautifulSoup(一个从HTML和XML中解析数据的库) MongoDB的用法 Mon ...

最新文章

  1. PyCharm缺少cv2模块怎么办?怎样在PyCharm中安装自己需要的package?
  2. Docker简介以及mysql和redis的部署
  3. Python3中的 Filter的改变
  4. 软件配置管理(六)常用配置软件配置工具指令
  5. 【linux】Ubuntu 18.04 设置桌面快捷启动方式
  6. 最安全的浏览器?黑客大赛微软Edge被破解5次夺下“冠军”
  7. JS与Jquery的事件委托机制
  8. jquery的get和post请求
  9. cmd批量修改文件名 增加文字_Windows批处理脚本:以批量修改文件名为例
  10. 详解电子名片不一样的展示推广功能
  11. 液相色谱质谱联用市场现状及未来发展趋势
  12. Google OpenThread 技术研讨会
  13. 路由与交换 实验一 路由器基本配置
  14. Python绘制直方图(Histograms)—从文件中读取数据画图update@2017-05-17
  15. Kotlin For循环详解
  16. ipv6的127位掩码如何表示_计算机子网掩码知识举例详解
  17. 点星PBX(DotAsterisk)和讯时MX100G数字中继网关外呼去掉本地被叫号码区号的方法
  18. 气象预警信号图标设计中的坑
  19. 块元素、行内元素、行内块元素
  20. SQL实现排序,并输出序号

热门文章

  1. 中国胶印机市场运行调研及投资前景预测分析报告2022-2028年
  2. 一次关于tcpdump的使用心得
  3. 码云 Gitee 的 WebHooks 实现代码自动化部署
  4. 1975-8板桥水库溃坝(河南75·8水灾)卫星图像记录
  5. 期刊缩写查找及latex使用中的一些问题
  6. 从无到有实现音视频通讯
  7. python简单实战项目:《冰与火之歌1-5》角色关系图谱构建——数据库设计
  8. 英国海运主要港口有哪些
  9. scrum敏捷开发实践—leangoo任务看板
  10. Excel如何快速定位相同字体颜色的单元格?