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.Entryi: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,Mapparams,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;
Mapparams=newHashMap();
params.put("appKey",APP_KEY);
params.put("openId",OPEN_ID);
//变动部分
params.put("city","成都");
Stringresult=requestContent(requestUrl,params,method);
System.out.println(result);
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。