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之eval()函数危险性浅析
Jul 03 Python
python中enumerate的用法实例解析
Aug 18 Python
python字符串替换的2种方法
Nov 30 Python
Python的迭代器和生成器
Jul 29 Python
python绘制条形图方法代码详解
Dec 19 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
Python Lambda函数使用总结详解
Dec 11 Python
python global和nonlocal用法解析
Feb 03 Python
Python脚本去除文件的只读性操作
Mar 05 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
Python plt 利用subplot 实现在一张画布同时画多张图
Feb 26 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截取后台登陆密码的代码
2012/05/05 PHP
PHP异常处理Exception类
2015/12/11 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
JS中彻底删除JSON对象组成的数组中的元素
2020/09/22 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
javascript/jquery获取地址栏url参数的方法
2014/03/05 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
js树插件zTree获取所有选中节点数据的方法
2015/01/28 Javascript
Node.js 学习笔记之简介、安装及配置
2015/03/03 Javascript
jquery实现标题字体变换的滑动门菜单效果
2015/09/07 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
BootStrap modal模态弹窗使用小结
2016/10/26 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
python发送HTTP请求的方法小结
2015/07/08 Python
目前最全的python的就业方向
2018/06/05 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
python中关于数据类型的学习笔记
2020/07/19 Python
html5的canvas元素使用方法介绍(画矩形、画折线、圆形)
2014/04/14 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
全球速卖通西班牙站:AliExpress西班牙
2017/10/30 全球购物
实习护理工作自我评价
2013/09/25 职场文书
小学教师国培感言
2014/02/08 职场文书
司法助理专业自荐书
2014/06/13 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
python实现图片批量压缩
2021/04/24 Python
JVM之方法返回地址详解
2022/02/28 Java/Android