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 基础知识之字符串处理
Jan 06 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
Jan 20 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
Python中django学习心得
Dec 06 Python
python线程中同步锁详解
Apr 27 Python
python 读取Linux服务器上的文件方法
Dec 27 Python
使用Python实现毫秒级抢单功能
Jun 06 Python
Python3enumrate和range对比及示例详解
Jul 13 Python
python原类、类的创建过程与方法详解
Jul 19 Python
如何把python项目部署到linux服务器
Aug 26 Python
PyCharm安装PyQt5及其工具(Qt Designer、PyUIC、PyRcc)的步骤详解
Nov 02 Python
python对输出的奇数偶数排序实例代码
Dec 04 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生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
php解析非标准json、非规范json的方式实例
2020/12/10 PHP
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
js print打印网页指定区域内容的简单实例
2016/11/01 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
Vue实现日历小插件
2019/06/26 Javascript
[01:20]辉夜杯背景故事宣传片《辉夜传说》
2015/12/25 DOTA
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
python中pyqtgraph知识点总结
2021/01/26 Python
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
类的返射机制中的包及核心类
2016/09/12 面试题
文秘人员工作职责
2014/01/31 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
献爱心活动总结
2014/05/07 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
通讯稿格式及范文
2015/07/22 职场文书
社区挂职锻炼个人工作总结
2015/10/23 职场文书
浅谈Redis在直播场景的实践方案
2021/04/27 Redis
MySQL学习之基础命令实操总结
2022/03/19 MySQL