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中的pygal安装和绘制直方图代码分享
Dec 08 Python
windows 下python+numpy安装实用教程
Dec 23 Python
pandas将numpy数组写入到csv的实例
Jul 04 Python
python调用摄像头显示图像的实例
Aug 03 Python
PyCharm 设置SciView工具窗口的方法
Jan 15 Python
python3实现字符串操作的实例代码
Apr 16 Python
对python 中class与变量的使用方法详解
Jun 26 Python
Python实现图像的垂直投影示例
Jan 17 Python
pip install 使用国内镜像的方法示例
Apr 03 Python
Django+Uwsgi+Nginx如何实现生产环境部署
Jul 31 Python
Python 必须了解的5种高级特征
Sep 10 Python
python运行脚本文件的三种方法实例
Jun 25 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 分页函数multi() discuz
2009/06/21 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
Array of country list in PHP with Zend Framework
2011/10/17 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
2015/09/25 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
PHP输出Excel PHPExcel的方法
2018/07/26 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
JQuery动画animate的stop方法使用详解
2014/05/09 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
javascript实现密码验证
2015/11/10 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
Struts2+jquery.form.js实现图片与文件上传的方法
2016/05/05 Javascript
Bootstrap modal 多弹窗之叠加引起的滚动条遮罩阴影问题
2017/02/27 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
关于laydate.js加载laydate.css路径错误问题解决
2017/12/27 Javascript
[00:56]PWL开团时刻DAY8——追追追追追!
2020/11/09 DOTA
Python性能优化的20条建议
2014/10/25 Python
Python实现网站注册验证码生成类
2017/06/08 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
python爬虫用mongodb的理由
2020/07/28 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
函授本科个人自我鉴定
2014/03/25 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
2014年协会工作总结
2014/11/22 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
材料采购员岗位职责
2015/04/03 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
MySQL 数据 data 基本操作
2022/05/04 MySQL