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常见文件操作的函数示例代码
Nov 15 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
python实现批量解析邮件并下载附件
Jun 19 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
Django框架 querySet功能解析
Sep 04 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 Python
python实现简单的tcp 文件下载
Sep 16 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
termux中matplotlib无法显示中文问题的解决方法
Jan 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
php获取是星期几的的一些常用姿势
2019/12/15 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
jquery 分页控件实现代码
2009/11/30 Javascript
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
2013/08/05 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
javascript实现支持移动设备画廊
2015/08/24 Javascript
jQuery事件绑定用法详解(附bind和live的区别)
2016/01/19 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
JavaScript操作文件_动力节点Java学院整理
2017/06/30 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
JavaScript实时更新当前的时间的示例代码
2020/07/15 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
python的re正则表达式实例代码
2018/01/24 Python
解决Pycharm中import时无法识别自己写的程序方法
2018/05/18 Python
python读取各种文件数据方法解析
2018/12/29 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
解决import tensorflow as tf 出错的原因
2020/04/16 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
详解CSS3中使用gradient实现渐变效果的方法
2015/08/18 HTML / CSS
HTML5之多线程(Web Worker)
2019/01/02 HTML / CSS
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
如何利用find命令查找文件
2015/02/07 面试题
正隆泰信息技术有限公司上机题
2012/06/14 面试题
店长岗位的工作内容
2013/11/12 职场文书
大学生党员自我批评
2014/02/14 职场文书
艺术学院毕业生求职信
2014/07/09 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
2015年医院科室工作总结范文
2015/05/26 职场文书