python笔记:常用内建模块—xml(习题)

练习

请利用SAX编写程序解析Yahoo的XML格式的天气预报,获取天气预报:

https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=xml

参数woeid是城市代码,要查询某个城市代码,可以在weather.yahoo.com搜索城市,浏览器地址栏的URL就包含城市代码。

代码:

# -*- coding:utf-8 -*-
from xml.parsers.expat import ParserCreate
from urllib import request
class DefaultSaxHandler(object):
    d=""
    fore=[]
    def start_element(self, name, attrs):
        if name=="yweather:location" and "city" in attrs:
            self.d=attrs['city']
        elif name=="yweather:forecast":
            self.fore.append({"date":attrs['date']})
            self.fore[-1]["day"]=attrs['day'] 
            self.fore[-1]["high"]=attrs['high']
            self.fore[-1]["low"]=attrs['low'] 

   
    
# 测试:
URL = 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=xml'

with request.urlopen(URL, timeout=4) as f:
    data = f.read()
handler = DefaultSaxHandler()
parser = ParserCreate()
parser.StartElementHandler = handler.start_element
parser.Parse(data.decode('utf-8'))
print("city:",handler.d)
for item in handler.fore:
    print('---------------')
    for k,v in item.items():
        print("%s: %s" % (k,v))

运行:

明天要解决的问题:

1、感觉不熟悉的地方 tuple list 与dict区别,果然基础没打好,需要重新看一遍了

2、{},[ ],() 以及其操作,因为用了()出现

 

3、以及对象.变量调用类内部定义的变量,能否隔一个函数进行传值

4、对这个习题进行改良,可以输出当天的天气,将城市名称,当天天气,天气预报都放在一个里面存储

5、最后输出%s,%s,%(k,v),与直接输出的区别

猜你喜欢

转载自blog.csdn.net/zyckhuntoria/article/details/81089059