初次玩pyecharts:30行代码做一个可视化广东省各地天气温度排行图
初次玩pyecharts:30行代码做一个可视化广东省各地天气温度排行图
开篇点题,直接上效果图
开篇再点题,直接上源码
import re
import requests
from pyecharts import Barurl = 'https://www.tianqi.com/province/guangdong/'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36','referer': 'https://www.tianqi.com/chinacity.html',
}DATA = []
def spider():response = requests.get(url,headers=headers)text = response.textcities = re.findall(r'<a.*?><h5>(.*?)</h5>', text)weathers = re.findall(r'<li>.*?<em>(.*?)</em>',text)for value in zip(cities,weathers):cities,weathers = valueweather_city_data = {'city':cities,'weather':weathers,}DATA.append(weather_city_data)DATA.sort(key=lambda data: data['weather'])temps = list(map(lambda x: x['weather'], DATA))cities = list(map(lambda c: c['city'], DATA))chart = Bar("广东各地天气最高气温排行榜")chart.add('', cities, temps)chart.render('temperature.html')if __name__ == '__main__':spider()
接下来,我们将代码一步一步详细讲解
- headers头部信息内容在此就不过多赘述了,爬虫一般都需要填写此个头部信息。不了解的不妨点击我的上一篇博客,当然论坛里也有详细讲解headers头部信息的文章,都可以看一看。
- 该篇源码最主要的还是
def spider()
方法中的内容——
第一块内容
def spider():response = requests.get(url,headers=headers)text = response.textcities = re.findall(r'<a.*?><h5>(.*?)</h5>', text)weathers = re.findall(r'<li>.*?<em>(.*?)</em>',text)
这里的步骤是将以下网站的内容解析出来,我们这里用正则表达式来解析页面内广东省各地的城市名以及最高温度。
https://www.tianqi.com/province/guangdong/
既然用到re正则表达式的话,我们简单讲一下里面的内容——
我们看到城市名字的标签在 a 标签下的 h5 标签中,那么正则表达式就是r'<a.*?><h5>(.*?)</h5>'
。(.*?)就是我们要的内容,?用到了非贪婪匹配。
同理weathers
的正则表达式也是按这个模板写。
不过,里面有个问题,我们先将获得的weathers
,cities
内容打印一下,看看得出来的结果是什么,还有得出的结果是什么类型。
我们看到类型是list,也就是列表类型。这样所有的结果都在一个列表内是不行的,我们的需求应该是下图这样,城市和所在城市对应的温度。
第二块内容
for value in zip(cities,weathers):cities,weathers = valueweather_city_data = {'city':cities,'weather':weathers,}DATA.append(weather_city_data)
上面的对应关系,我们就需要for循环遍历后,将city
和weather
添加在DATA
数据中,城市和温度一一对应就不会在后面的温度排序中出错。
我们这里讲讲zip
函数的用法,举个例子:
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b) # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c) # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
↑上述内容zip
实例取自↓ (大家有关python的基础知识也可以在里面看看)
http://www.runoob.com/python/python-func-zip.html
第三块内容
DATA.sort(key=lambda data: data['weather']) #sort是作升序排序temps = list(map(lambda x: x['weather'], DATA)) cities = list(map(lambda c: c['city'], DATA))chart = Bar("广东各地天气最高气温排行榜") # Bar填入的是生成文件的标题chart.add('', cities, temps) #添加城市和温度数据chart.render('temperature.html') #生成文件
这一块知识点挺多的,用到了lambda
,sort
,map
。
sort
在上面代码中备注了,就不详说了。
lambda
的内容我推荐论坛博主@Q-WHai的文章,↓讲得十分详细。
https://blog.csdn.net/lemon_tree12138/article/details/50774827
在此,我借博文中的图给大家参考理解一下。
map()
函数,我们可以看一看map()
函数的定义:
map(func, *iterables) --> map object
map()
内我们需要传入function
(函数)和iterables
(队列)
举个例子:
>>>def square(x) : # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3]) # 计算列表各个元素的平方
[1, 4, 9]
>>> map(lambda x: x ** 2, [1, 2, 3]) # 使用 lambda 匿名函数
[1, 4, 9]
本文内容就到这了,我们下回见~
初次玩pyecharts:30行代码做一个可视化广东省各地天气温度排行图相关推荐
- 用30行代码做一个微信智障机器人
起因是某天早上看到这样一条朋友圈: 微信啥时候还有会员了?可怕,花里胡哨,这是要往QQ的方向发展吗.还是 Telegram 比较存粹. 连IS恐怖组织都在使用,最安全的即时通讯软件--Telegram ...
- python可以制作网站吗_Python大神带你用30行代码打造一个网站,爬虫+web不一样的玩法...
首先,先把实际的效果图放上来: 用Python做的个性签名网站-效果图 在开始做之前,我们必须得知道这个用了那些模块: flask:一个轻量级的web开发框架,相信很多人也听说过这个牛逼加简洁的框架 ...
- c++获取子类窗口句柄位置_干货分享:用一百行代码做一个C/C++表白小程序,程序员的浪漫!...
前言:很多时候,当别人听到你是程序员的时候.第一印象就是,格子衫.不浪漫.直男.但是程序员一旦浪漫起来,真的没其他人什么事了.什么纪念日,生日,情人节,礼物怎么送? 做一个浪漫的程序给她,放上你们照片 ...
- 自己用html + js 一百行代码做一个朗读器
感谢内容提供者:金牛区吴迪软件开发工作室 文章目录 前言 一.设置语言和朗读人员 二.设置音高[不是声音大小] 三.设置音速 四.设置声音大小 五.添加暂停和恢复播放功能 六.完整代码 前言 因为笔者 ...
- 【Python】30行代码实现一个万年历
本文基于Python的PyQt5实现一个桌面版的万年历,核心代码小于30行. 首先安装PyQt5 pip install PyQt5 引入日历相关的核心组件 import sys from PyQt5 ...
- 20行代码做一个简易微信群发工具需要哪些单词
群发工具是一些销售.中介.网课助手等都爱喜欢用的小工具.在微信还支持网页版登录时候,我们可以用wxpy做群发工具,这样更专业更高效.但随着微信关闭了网页版登录后,这个库彻底不能用了.好在我们可以用原始 ...
- 人看不如机算:手把手叫你用python50行代码做一个ocr核酸检测报告并输出到统计表中
最近公司天天在排查核酸检测报告情况,看的我是眼花缭乱.作为机器视觉的我深知,计算机代替人可是事半功倍.于是准备上手写一个代码. 原图大体类似这种: 我需要每天看大量的这类图.于是.我决定使用paddl ...
- c语言 10行代码做一个压枪工具!
先来了解一下需要用到的函数 1.GetAsyncKeyState 这个在上一期的文章鼠标连点器里面有介绍,这里简单说一下用法就好了 if(GetAsyncKeyState(VK_SPACE)) //按 ...
- 我只会python、怎么搞个软件出来-python---很多行代码做一个自动打开软件的程序...
这里我要推荐一个可以控制鼠标和键盘的库,pyautogui,据它的官方文档,PyAutoGUI的目的是为人类的 GUI自动化提供跨平台的Python模块. 既然能控制了,只要安排好逻辑就可以使其按照我 ...
最新文章
- CRUX下实现进程隐藏(3)
- 在 Ubuntu Linux 下搜索文件和文件内容
- 用于构建集成式桌面应用程序的新指南和新工具(转载于MSDN)
- wxWidgets:wxConfigPathChanger类用法
- c或c++语言什么时候用补码来运算,C/C++(基础编码-补码详解)
- python web前端开发面试_面试前端,听听别人怎么说!
- layui 表格点击图片放大
- excel 表生成insert语句。
- Visual Leak Detector 2.2.3 Visual C++内存检测工具
- 张宇基础30讲 第17讲-元函数积分学基础知识
- 开源代码审计工具备忘
- community_louvain社群划分方法
- DirectShow播放视频流程
- 魔兽争霸3冰封王座十大经典战役全集
- Shiny应用基础(5):数据获取与响应
- verilog 中的可综合与不可综合
- UE4 UMG多行文本
- 使用Python获取DNS记录
- 守护线程setDaemon的理解
- 医疗器械分销系统开发|分销商是怎么招募的?