爬取中国天气网的最高气温并绘制成柱状图

爬取中国天气网的最高气温并绘制成柱状图学习视频:代码如下:运行效果:学习视频:https://www.bilibili.com/video/av96849338?p=39新人一枚,深知初学不易,所以将近期学习笔记整理发出,若有错误,请联系我代码如下:# encoding: utf-8# time: 2020/3/22 16:44# 说明:爬取中国天气网的最高气温,并将其绘制成柱状图。...
摘要由CSDN通过智能技术生成

学习视频:

https://www.bilibili.com/video/av96849338?p=39
欢迎留言批评指出错误。
在这里插入图片描述

方法与思路:

应用模块:

在这里插入图片描述
requests:发送请求,获取响应
beautifulsoup4:从 HTML 或 XML 文件中提取数据的 Python 库.
pyecharts:生成我们需求的柱状图
安装方式示例:pip install beautifulsoup4

数据提取方式:

采用beautifulsoup库提取信息。

find与find_all的区别:
find:提取子节点下的第一个标签。
find_all:提取子孙节点上所有满足要求的标签,以列表的形式输出。

strings和stripped_strings、string属性以及get_text方法:
string:获取某个标签下的非标签字符串,返回来的是个字符串。
strings:获取某个标签下的子孙非标签字符串,返回来的是个生成器。
stripped_strings:获取某个标签下的子孙非标签字符串,会去掉空白字符,返回来的是个生成器。
get_text:获取某个标签下的子孙非标签字符串,不是以列表的形式返回,是以普通字符串的形式返回。

网页分析:

在这里插入图片描述
观察知全国共分为华北、东北等8个地区,每个地区的网页url不同:
urls = {
‘http://www.weather.com.cn/textFC/hb.shtml’,
‘http://www.weather.com.cn/textFC/db.shtml’,
‘http://www.weather.com.cn/textFC/hd.shtml’,
‘http://www.weather.com.cn/textFC/hz.shtml’,
‘http://www.weather.com.cn/textFC/hn.shtml’,
‘http://www.weather.com.cn/textFC/xb.shtml’,
‘http://www.weather.com.cn/textFC/xn.shtml’,
‘http://www.weather.com.cn/textFC/gat.shtml’
}

下面我们取一个url为例,比如华北地区,检查网页源码分析得:

在这里插入图片描述
因此,我们需要提取的城市tr标签应为:
trs = table.find_all(‘tr’)[2:]

在这里插入图片描述
再次观察发现,北京对应的tr标签下有9个td标签,而海淀等后方城市只有8个td标签,总结得出第一个td标签对应的是省、直辖市,所以后方提取时,我们采用倒数的方法:
city_td = tds[-8]
temp_td = tds[-5]
这样就可避免匹配错误

如此重复便可获取所有城市以及对应的温度信息,将其封装在ALL_DATA信息中,值得一说的是,港澳台地区的网页源码并不规范,其原代码中

并不完整,缺少‘/table’,但是检查时发现源码补齐了/table,这是因为后台渲染解析时是采用html5lib的解析方式,容错能力强。若使用:
text = response.content.decode(‘utf-8’)
soup = BeautifulSoup(text, ‘lxml’)
会产生错误,虽然lxml的解析速度快,但是容错能力不如html5lib,解析华北等地区并无影响,但对于港澳台这编写不规范时容易出错,所以全部采用html5lib的解析方式。
text = response.content.decode(‘utf-8’)
soup = BeautifulSoup(text, ‘html5lib’)

代码如下:

在这里插入图片描述


                
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值