python获取全国城市pm2.5、臭氧等空气质量过程解析
随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空气质量指数分析,这里是笔者自己实现的一个python调用方式
代码如下:
#-*-coding:utf-8-*- #flake8:noqa __author__='wukong' importurllib fromurllibimporturlencode #配置您申请的appKey和openId app_key="***" open_id="***" """ request_url请求地址 params请求参数 method请求方法 """ defrequest_content(request_url,params,method): params=urlencode(params) ifmethodandmethod.lower()=="get": f=urllib.urlopen("%s?%s"%(request_url,params)) else: f=urllib.urlopen(request_url,params) content=f.read() printcontent defmain(): domain="http://api.xiaocongjisuan.com/"; servlet="life/air/analysis" method="get" request_url=domain+servlet #字典 params={} params["appKey"]=app_key params["openId"]=open_id #变动部分 params["city"]="成都" request_content(request_url,params,method) if__name__=='__main__': main()
java版的代码可以参考如下代码:
packagecom.xiaocongjisuan.module.example; importjava.io.BufferedReader; importjava.io.DataOutputStream; importjava.io.IOException; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.io.UnsupportedEncodingException; importjava.net.HttpURLConnection; importjava.net.URL; importjava.net.URLEncoder; importjava.util.HashMap; importjava.util.Map; publicclassApplication{ publicstaticfinalStringDEF_CHATSET="UTF-8"; publicstaticfinalintDEF_CONN_TIMEOUT=30000; publicstaticfinalintDEF_READ_TIMEOUT=30000; publicstaticStringuserAgent="Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.36(KHTML,likeGecko)Chrome/29.0.1547.66Safari/537.36"; //配置您申请的appKey和openId publicstaticfinalStringAPP_KEY="yours"; publicstaticfinalStringOPEN_ID="yours"; //将map型转为请求参数型 publicstaticStringurlEncode(Mapparams){ if(params==null){return"";}; StringBuildersb=newStringBuilder(); for(Map.Entry i:params.entrySet()){ try{ sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&"); }catch(UnsupportedEncodingExceptione){ e.printStackTrace(); } } Stringr=sb.toString(); if(r.endsWith("&")){ r=r.substring(0,r.length()-1); } returnr; } /** * *@paramrequestUrl请求地址 *@paramparams请求参数 *@parammethod请求方法 *@return请求结果 *@throwsException */ publicstaticStringrequestContent(StringrequestUrl,Map params,Stringmethod)throwsException{ HttpURLConnectionconn=null; BufferedReaderreader=null; Stringrs=null; try{ //组装请求链接 StringBuffersb=newStringBuffer(); if(method!=null&&method.equalsIgnoreCase("get")){ requestUrl=requestUrl+"?"+urlEncode(params); } //默认get URLurl=newURL(requestUrl); conn=(HttpURLConnection)url.openConnection(); conn.setRequestMethod("GET"); if(method!=null&&method.equalsIgnoreCase("post")){ conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); } //参数配置 conn.setRequestProperty("User-agent",userAgent); conn.setUseCaches(false); conn.setConnectTimeout(DEF_CONN_TIMEOUT); conn.setReadTimeout(DEF_READ_TIMEOUT); conn.setInstanceFollowRedirects(false); conn.connect(); if(params!=null&&method.equalsIgnoreCase("post")){ try{ DataOutputStreamout=newDataOutputStream(conn.getOutputStream()); out.writeBytes(urlEncode(params)); }catch(Exceptione){ e.printStackTrace(); } } //读取数据 InputStreamis=conn.getInputStream(); reader=newBufferedReader(newInputStreamReader(is,DEF_CHATSET)); StringstrRead=null; while((strRead=reader.readLine())!=null){ sb.append(strRead); } rs=sb.toString(); }catch(IOExceptione){ e.printStackTrace(); }finally{ if(reader!=null){ reader.close(); } if(conn!=null){ conn.disconnect(); } } returnrs; } publicstaticvoidmain(String[]args)throwsException{ Stringdomain="http://api.xiaocongjisuan.com/"; Stringservlet="life/air/analysis"; Stringmethod="get"; StringrequestUrl=domain+servlet; Map params=newHashMap (); params.put("appKey",APP_KEY); params.put("openId",OPEN_ID); //变动部分 params.put("city","成都"); Stringresult=requestContent(requestUrl,params,method); System.out.println(result); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。