【Python网络爬虫与数据可视化实战案例】未来15天气温走势图
2020-04-17
需求描述
打开天气网,点击上方城市名称,再点击“15天天气”,进入如下页面。这里以天津为例。
)

可以看到,这里是有未来15天的天气和气温状况的。我们要做的就是把每天的最高和最低气温爬取下来,并做成折线图的形式。
需求分析
任意选取一天的气温,单击鼠标右键检查元素(这里我使用的是Firefox浏览器,不同浏览器可能略有不同)进入查看器。我们得到了下图所示的HTML结构。
可以看出,每一天的天气信息都存储在class属性为table_day的div标签之中,而气温信息则存储在div标签内部的class属性为temp的li标签之中。那么,我们只需要定位到这个标签,对该标签内的文本进行提取,即可获得这15天的最高气温和最低气温。
代码实现
首先我们需要导入相关的模块。
1 | import re |
对网站发起请求,获取页面的数据。即进行UA伪装后对URL发起GET请求。
1 | headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'} |
筛选出有关气温信息的内容。
在筛选出class属性为temp的li标签的文本之后,我使用了正则表达式来分离最高气温值与最低气温值,并保存到对应的列表中。以波浪线作为切入点,波浪线前的数字即为最低气温,波浪线后的数字即为最高气温。获取正则匹配的文本之后,对字符串进行切片,然后使用eval()函数将其转化为数字形式存放在列表中。
1 | soup = BeautifulSoup(page_text, 'html.parser') |
最后一步,使用pyecharts模块进行数据可视化。
这里我偷了个懒,attr列表中的内容是可以在筛选数据的过程中一并获取的。写代码的时候为了方便就自己写了attr列表。这样写有个缺点,就是在做下一次的15天气温预报的时候需要手动更改attr列表中的元素。
1 | attr = ['2020-04-16', '2020-04-17', '2020-04-18', '2020-04-19', '2020-04-20', '2020-04-21', '2020-04-22', '2020-04-23', |
完整代码及结果展示
该样例的完整代码如下:
1 | #!/usr/bin/env python3 |
运行这个程序可以得到一个HTML文件。使用浏览器打开,得到下图所示的结果: