天气网爬虫,具体使用到了json数据转换和代理的设置

由于本人过多的调试代码,导致接口限时被封,所以找了代理的方法,话不多说,代码实现如下:

from urllib import parse
import requests,xmltodict,json

url="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName"
city={"theCityName":"上海"}

headr={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"}
ctityl=parse.urlencode(city).encode('utf-8')#设置提交数据的编码格式为utf-8,有用到urllib库

# r=requests.get(url,params=ctityl,headers=headr)
prox={"http":"http://36.7.26.113:4216"}
r=requests.get(url,params=ctityl,headers=headr,proxies=prox)#使用代理服务器进行爬虫

r.encoding='utf-8'#将返回的数据转换为utf-8
o = xmltodict.parse(r.text)# parse是的xml解析器
sjson=json.dumps(o,ensure_ascii=False,indent=1)# dumps()方法的indent=1,格式化json
# json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。
data=eval(sjson)#转换为dict数据
# print(sjson)
print("省会城市:"+data['ArrayOfString']['string'][0])
print("市级城市:"+data['ArrayOfString']['string'][1])
print("日期:"+data['ArrayOfString']['string'][4])
print("最高温度和最低温度:"+data['ArrayOfString']['string'][5])
print("天气情况:"+data['ArrayOfString']['string'][6])
print("风级:"+data['ArrayOfString']['string'][7])
print(data['ArrayOfString']['string'][10])
print(data['ArrayOfString']['string'][11])
print("城市介绍"+data['ArrayOfString']['string'][-1])


# 知识拓展:
# xmltodict库的unparse()json转xml
    # 参数pretty 是格式化xml
    # xml_str = xmltodict.unparse(data, pretty=1)

实现结果如下:

 

posted @ 2020-05-24 12:37  菌子石雨  阅读(165)  评论(0)    收藏  举报