Python读取网络数据(request库和re模块)

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

很多时候,程序并不能直接展示本地文件中的数据,此时需要程序读取网络数据,并展示它们。

比如前面介绍的 http://lishi.tianqi.com 站点的数据,它并未提供下载数据的链接(前面程序所展示的 csv 文件本身就是使用程序抓取下来的)。在这种情况下,程序完全可以直接解析网络数据,然后将数据展示出来。

前面已经介绍了 Python 的网络支持库 urllib,通过该库下的 request 模块可以非常方便地向远程发送 HTTP 请求,获取服务器响应。因此,本程序的思路是使用 urllib.request 向 lishi.tianqi.com 发送请求,获取该网站的响应,然后使用 Python 的 re 模块来解析服务器响应,从中提取天气数据。

本程序将会通过网络读取 http://lishi.tianqi.com 站点的数据,并展示 2017 年广州的最高气温和最低气温。

这个程序后半部分的绘图代码与前面程序并没有太大的区别,该程序的最大改变在于前半部分代码,该程序不再使用 csv 模块来读取本地 csv 文件的内容,而是使用 urllib.request 来读取 lishi.tianqi.com 站点的天气数据,程序中 ① 号代码定义了一个 get_html() 函数来读取指定站点的 HTML 内容。

接下来程序使用循环依次读取 01~12 每个月的响应页面,程序读取到每个响应页面的 HTML 内容,这份 HTML 页面内容中包含天气信息的源代码如图 1 所示。

图 1 包含天气信息的HTML源代码

程序中第 32 行代码使用正则表达式来获取包含全部天气信息的 <div.../> 元素,即图 1 中数字 1 所标识的 <div.../> 元素。

程序中第 34 行代码使用正则表达式来匹配天气 <div.../> 中没有属性的 <ul.../> 元素,即图 1 中数字 2 所标识的 <ul.../> 元素。这样的 <ul.../> 元素有很多个,每个 <ul.../> 元素代表一天的天气信息,因此,上面程序使用了循环来遍历每个 <ul.../> 元素。

程序中第 38 行代码使用正则表达式来匹配每日天气 <ul...> 中的 <li.../> 元素,即图 1 中数字 3 所标识的 <li.../> 元素。在每个 <ul.../> 元素内可匹配到 6 个 <li.../> 元素,但程序只获取日期、最高气温和最低气温,因此,程序只使用前三个 <li.../> 元素的数据。

通过网络、正则表达式获取了数据之后,程序使用 Matplotlib 来展示它们。运行上面程序,即可看到表示 2017 年广州气温变化的数据图。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值