天气网爬虫,具体使用到了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)
实现结果如下:


浙公网安备 33010602011771号