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的Flask框架中实现登录用户的个人资料和头像的教程
Apr 20 Python
python对DICOM图像的读取方法详解
Jul 17 Python
神经网络理论基础及Python实现详解
Dec 15 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
python 批量修改 labelImg 生成的xml文件的方法
Sep 09 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
python简单实现9宫格图片实例
Sep 03 Python
Python读取多列数据以及用matplotlib制作图表方法实例
Sep 23 Python
一行代码python实现文件共享服务器
Apr 22 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
Search Engine Friendly的URL设计
2006/10/09 PHP
PHP中使用file_get_contents post数据代码例子
2015/02/13 PHP
WordPress过滤垃圾评论的几种主要方法小结
2016/07/11 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
教你用AngularJS框架一行JS代码实现控件验证效果
2014/06/23 Javascript
深入浅析Extjs中store分组功能的使用方法
2016/04/20 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
js中getBoundingClientRect的作用及兼容方案详解
2018/02/01 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
Python使用CMD模块更优雅的运行脚本
2015/05/11 Python
详解详解Python中writelines()方法的使用
2015/05/25 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
惠普墨西哥官方商店:HP墨西哥
2016/12/01 全球购物
英国礼品和生活方式品牌:Treat Republic
2020/11/21 全球购物
2014年小班元旦活动方案
2014/02/16 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
主要负责人任命书
2014/06/06 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
搞笑老公保证书
2015/02/26 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
redis 限制内存使用大小的实现
2021/05/08 Redis
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS