Python爬虫系列:使用selenium+Edge查询指定城市天气情况

话说,国外有个网站http://openweathermap.org/可以免费查询指定城市的当前天气情况:

那是不是可以写个爬虫程序,自动调用网站的功能来实现天气查询呢?毕竟在网页上已经清清楚楚地显示了这些数据。按惯例,查看源码,却发现啥也木有。

再仔细检查,发现这个网站是使用JavaScript动态获取并显示天气数据的:

继续查找和分析,原来数据都是在这里的。

看起来好像很麻烦的样子,还是换个思路吧,等有时间再慢慢分析如何提取这样的数据。回到网站首页,发现该网站还提供了API接口,可以直接调用并以JSON格式返回指定城市的天气数据,但是需要首先拥有一个API key才行:

如何获取这个API key呢,答案是注册一个账号:

然而,注册账号时会调用google的验证服务,除非采取特殊手段,否则不会成功,原因不解释。

两条路都不太顺畅啊,还是再换个思路吧。按道理讲,只要是在网页上显示出来的数据,理论上都应该是可以提取出来的。如果能够模拟浏览器的渲染过程,得到渲染后的前端代码,应该就可以了。

那么怎么模拟呢?让我们拿出一个大杀器,selenium,通过这个扩展库可以驱动几个主流浏览器并调用其功能,这里我们选择使用Edge。

首先,查看一下本地计算机Windows操作系统的内部版本号,以我的Win10为例,步骤为:依次单击开始==>设置==>系统==>关于,找到下图中的操作系统内部版本号:

然后打开网址https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/,下载合适版本的驱动,并放到Python安装目录下:

接下来,来到命令提示符环境,使用pip安装扩展库selenium:

最后编写如下Python代码,查询指定城市的天气情况:

上面代码中的正则表达式是根据driver.page_cource的内容编写的,可以自行分析并逐步尝试,代码运行结果如下(运行过程会稍微慢一点):

和网页上的数据对比一下:

内容完全一致。当然,如果使用更整洁的格式查看天气数据,可以使用正则表达式从程序结果中进行二次提取,不再赘述。

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2018-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

分布式事务的实现原理

事务是数据库系统中非常有趣也非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全不执行;在 SOA 与...

1373
来自专栏smy

一张图解释负载均衡

首先当大量用户访问时候,先请求到nignx服务器,因为nignx对于高并发支持较好,所以由nignx服务器将访问需求分配给不同的apache服务器,apache...

1443
来自专栏云加头条

腾讯云服务器配置不用愁 只需这几步

作为云计算服务的重要组成部分,云服务器以其简单高效、安全可靠、弹性扩展的特性成为核心力量,构建了包括计算、网络、存储在内的综合服务平台。以腾讯云服务器为例,CV...

22.5K7
来自专栏Java技术分享

Redis 在 SNS 类应用中的最佳实践有哪些?

2. 热点数据的实时缓存(比如feed,数据库、缓存同时写)

2209
来自专栏张戈的专栏

单机MySQL数据库优化推荐的编译安装参数

MySQL 编译参数多而复杂,让新手感到很头大,如果是正式生成环境安装 MySQL,没有充足的时间去研究每一个参数代表的意义,个人建议使用余洪春前辈整理的编译参...

3093
来自专栏程序猿DD

都在说微服务,那么微服务的反模式和陷阱是什么(一)

译者:程超 译文:http://www.jianshu.com/p/3986239138fe 一、数据驱动的迁移反模式 微服务会创建大量小的、分布式的、单一用途...

2029
来自专栏EAWorld

容器云之K8s自动化安装方式的选择

目前kubernetes 已经发展到1.5的时代,但在这之前学习和使用kubernetes还是走了不少弯路,第一个问题就是安装,也许你会说安装很简单。照着官网或...

3309
来自专栏一名合格java开发的自我修养

交易系统使用storm,在消息高可靠情况下,如何避免消息重复

概要:在使用storm分布式计算框架进行数据处理时,如何保证进入storm的消息的一定会被处理,且不会被重复处理。这个时候仅仅开启storm的ack机制并不能解...

943
来自专栏coderhuo

虚拟内存探究,深入理解进程地址空间

想了解堆栈等虚拟内存相关知识吗? 想知道下面这张进程地址空间示意图是如何一步一步画出来的吗? 《虚拟内存探究》系列文章将通过实验的方式带你学习相关知识。

982
来自专栏Golang语言社区

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库...

2687

扫码关注云+社区