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

在上一篇博文中,博主通过三个游戏程序讲述了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.request
import json
from city import city
from province import province

choice=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:
			continue
elif (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是城市编码。运行程序的效果如下:

python进阶——利用网页爬虫写天气预报采集器_第1张图片

你可能感兴趣的:(json,linux,python,爬虫,url)