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单例模式与metaclass
Jan 15 Python
Python时间获取及转换知识汇总
Jan 11 Python
Python遍历某目录下的所有文件夹与文件路径
Mar 15 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
详解flask入门模板引擎
Jul 18 Python
python3使用print打印带颜色的字符串代码实例
Aug 22 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
Nov 29 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
如何正确理解python装饰器
Jun 15 Python
简单介绍Python的第三方库yaml
Jun 18 Python
python全面解析接口返回数据
Feb 12 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
PHP初学入门
2006/11/19 PHP
PHP_NETWORK_GETADDRESSES: GETADDRINFO FAILED问题解决办法
2014/05/04 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
yii2的restful api路由实例详解
2019/05/14 PHP
动手学习无线电
2021/03/10 无线电
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
jQuery使用removeClass方法删除元素指定Class的方法
2015/03/26 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
使用DNode实现php和nodejs之间通信的简单实例
2015/07/06 NodeJs
JS中常用的输出方式(五种)
2016/06/12 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
AngularJs表单校验功能实例代码
2017/02/09 Javascript
vue实现分页栏效果
2019/06/28 Javascript
Vue2.0实现简单分页及跳转效果
2019/07/29 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
2019/01/15 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
python文件读写代码实例
2019/10/21 Python
Python 切分数组实例解析
2019/11/07 Python
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
SCDKey德国:全球领先的数字游戏市场
2019/04/09 全球购物
超市督导岗位职责
2015/04/10 职场文书
2015中学学校工作总结
2015/07/20 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
关于SpringBoot 使用 Redis 分布式锁解决并发问题
2021/11/17 Redis
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers