python进阶——利用网页爬虫写天气预报采集器

来源:互联网 发布:python open 编辑:程序博客网 时间:2024/06/05 17:54

在上一篇博文中,博主通过三个游戏程序讲述了python入门知识点击打开链接,现在再讲讲如何利用网页爬虫来写一个天气预报采集器,主要就是在中国天气网上爬取网页并过滤数据,得到需要的天气信息并打印出来。

其实要感谢我同学小党,他向我展示了他写的天气预报程序,可以输入城市后显示当前城市的天气和气温。然后我再完善了一下,不仅可以查全国城市的天气情况,也可以查一个省份或直辖市的总体天气情况,如输入“广东”则会列出广东省内所有地方的天气。

编程思想:在中国天气网给的链接中,http://www.weather.com.cn/data/cityinfo/%s.html 即可显示对应城市的天气,其中%s是城市编码,如北京的城市编码是101010100,则浏览器地址栏输入http://www.weather.com.cn/data/cityinfo/101010100.html 即可显示北京的天气信息(不信你试试- -;)。这样就可以生成城市和城市编码的字典,输入城市转化为编码,并嵌入到上述链接中,过滤得到相应的信息并打印出来。

那么,列出一个省份中所有城市的天气怎么实现呢?也很简单,我注意到一个省份的所有城镇的城市编码前5位都是一样的,如广东省的广州啊,深圳啊,东莞啊等等这些城市的编码前5位都是10128,因此可以生成省份和5位省份编码的字典,输入省份转化为编码,再加上剩余的4位并嵌入到上述链接中,过滤得到相应的信息并打印出来。

编程思想有了,敲代码就简单了,我自己实现的代码如下:

import urllib.requestimport jsonfrom city import cityfrom province import provincechoice=input('查询省份或直辖市的天气请输入1,查询某个城市的天气请输入2\n')if (choice=='1'):provincename=input('你想查哪个省份或直辖市的天气?\n')provincecode=province.get(provincename)city={v:k for  k,v in city.items()}for citycode in range(int(provincecode)*10000+1,int(provincecode)*10000+2000):if (city.get(str(citycode))):url = ('http://www.weather.com.cn/data/cityinfo/%s.html'%str(citycode))content = urllib.request.urlopen(url).read()data = json.loads(content.decode())result = data['weatherinfo']str_temp = ('%s %s %s ~ %s') % (result['city'],result['weather'],result['temp1'],result['temp2'])print (str_temp) else:continueelif (choice=='2'):cityname =input('你想查哪个城市的天气?\n')citycode = city.get(cityname)url = ('http://www.weather.com.cn/data/cityinfo/%s.html'%citycode)content = urllib.request.urlopen(url).read()data = json.loads(content.decode())result = data['weatherinfo']str_temp = ('%s %s %s ~ %s') % (result['city'],result['weather'],result['temp1'],result['temp2'])print (str_temp) else:print('不合法的输入')
代码里city和provincce都是一个字典文件,字典的key是城市名称,value是城市编码。运行程序的效果如下:

0 0
原创粉丝点击