python获取全国城市pm2.5、臭氧等空气质量过程解析


Posted in Python onOctober 12, 2019

随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空气质量指数分析,这里是笔者自己实现的一个python调用方式

代码如下:

# -*- coding: utf-8 -*-
# flake8: noqa
__author__ = 'wukong'

import urllib
from urllib import urlencode

#配置您申请的appKey和openId
app_key="***"
open_id="***"

"""
request_url 请求地址
params 请求参数
method 请求方法

"""
def request_content(request_url,params,method):
 params = urlencode(params)
 
 if method and method.lower() =="get":
  f = urllib.urlopen("%s?%s" % (request_url, params))
 else:
  f = urllib.urlopen(request_url, params)
 
 content = f.read()
 print content

 
def main():
 
 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版的代码可以参考如下代码:

package com.xiaocongjisuan.module.example;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

public class Application {
 
  public static final String DEF_CHATSET = "UTF-8";
  public static final int DEF_CONN_TIMEOUT = 30000;
  public static final int DEF_READ_TIMEOUT = 30000;
  public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
  
  //配置您申请的appKey和openId
  public static final String APP_KEY ="yours";
  public static final String OPEN_ID ="yours";
  
  //将map型转为请求参数型
  public static String urlEncode(Map<String,Object> params) {
  
  if(params==null){return "";};
   
  StringBuilder sb = new StringBuilder();
  for (Map.Entry<String,Object> i : params.entrySet()) {
   try {
    sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
   } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
   }
  }
  String r=sb.toString();
  if(r.endsWith("&")){
   r = r.substring(0,r.length()-1);
  }
  return r;
  }
  
  /**
  *
  * @param requestUrl 请求地址
  * @param params 请求参数
  * @param method 请求方法
  * @return 请求结果
  * @throws Exception
  */
  public static String requestContent(String requestUrl, Map<String,Object> params,String method) throws Exception {
  
  HttpURLConnection conn = null;
  BufferedReader reader = null;
  String rs = null;
  try {

   //组装请求链接
   StringBuffer sb = new StringBuffer();
   
   if(method!=null&&method.equalsIgnoreCase("get")){
    requestUrl = requestUrl+"?"+urlEncode(params);
   }

   //默认get
   URL url = new URL(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 {
     DataOutputStream out = new DataOutputStream(conn.getOutputStream());
     out.writeBytes(urlEncode(params));
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
   
   //读取数据
   InputStream is = conn.getInputStream();
   reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
   String strRead = null;
   while ((strRead = reader.readLine()) != null) {
    sb.append(strRead);
   }
   rs = sb.toString();
   
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (reader != null) {
    reader.close();
   }
   if (conn != null) {
    conn.disconnect();
   }
  }
  return rs;
 }
 
 
 public static void main(String[] args) throws Exception{
  
  String domain="http://api.xiaocongjisuan.com/";
  String servlet="life/air/analysis";
  String method="get";
  
  String requestUrl=domain+servlet;
  Map<String,Object> params=new HashMap<String,Object>();
  params.put("appKey",APP_KEY);
  params.put("openId",OPEN_ID);

  //变动部分
  params.put("city","成都");
  
  
  String result=requestContent(requestUrl,params,method);
  System.out.println(result);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 中 Meta Classes详解
Feb 13 Python
Python设计模式编程中解释器模式的简单程序示例分享
Mar 02 Python
基于Django模板中的数字自增(详解)
Sep 05 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
python爬取哈尔滨天气信息
Jul 14 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
django的auth认证,authenticate和装饰器功能详解
Jul 25 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
Python Subprocess模块原理及实例
Aug 26 Python
python将时分秒转换成秒的实例
Dec 07 Python
Python运行DLL文件的方法
Jan 17 Python
python中温度单位转换的实例方法
Dec 27 Python
Python 迭代,for...in遍历,迭代原理与应用示例
Oct 12 #Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 #Python
Python Collatz序列实现过程解析
Oct 12 #Python
python logging日志模块原理及操作解析
Oct 12 #Python
Python爬虫之urllib基础用法教程
Oct 12 #Python
python 生成器和迭代器的原理解析
Oct 12 #Python
python 表格打印代码实例解析
Oct 12 #Python
You might like
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
PHP常见的序列化与反序列化操作实例分析
2019/10/28 PHP
深入认识JavaScript中的函数
2007/01/22 Javascript
node.js中的http.createClient方法使用说明
2014/12/15 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
javascript解决IE6下hover问题的方法
2015/07/28 Javascript
js实现带农历和八字等信息的日历特效
2016/05/16 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
微信小程序实现锚点定位楼层跳跃的实例
2017/05/18 Javascript
vue2.0 实现页面导航提示引导的方法
2018/03/13 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
微信小程序批量监听输入框对按钮样式进行控制的实现代码
2019/10/12 Javascript
python list转dict示例分享
2014/01/28 Python
初步解析Python下的多进程编程
2015/04/28 Python
Python字符串替换实例分析
2015/05/11 Python
python发送邮件功能实现代码
2016/07/15 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
2019/12/18 Python
Python使用Pygame绘制时钟
2020/11/29 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
工作自荐信
2013/12/11 职场文书
人力资源管理系自荐信
2014/05/31 职场文书
司法助理专业自荐书
2014/06/13 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
校友回访母校寄语
2015/02/26 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书