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 相关文章推荐
深入理解NumPy简明教程---数组1
Dec 17 Python
Python处理文本文件中控制字符的方法
Feb 07 Python
Python程序退出方式小结
Dec 09 Python
Python构建网页爬虫原理分析
Dec 19 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
python飞机大战pygame游戏背景设计详解
Dec 17 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
Jan 19 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
python实现小程序推送页面收录脚本
Apr 20 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
基于 Python 实践感知器分类算法
Jan 07 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
jquery.validate使用攻略 第二部
2010/07/01 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
jQuery中:header选择器用法实例
2014/12/29 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
JavaScript中获取时间的函数集
2016/08/16 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
jQuery阻止移动端遮罩层后页面滚动
2017/03/15 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
用纯Node.JS弹出Windows系统消息提示框实例(MessageBox)
2017/05/17 Javascript
JS中的BOM应用
2018/02/02 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
vue实现购物车小案例
2019/09/27 Javascript
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
python对url格式解析的方法
2015/05/13 Python
Python中的fileinput模块的简单实用示例
2015/07/09 Python
Python sqlite3事务处理方法实例分析
2017/06/19 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
快速解决docker-py api版本不兼容的问题
2019/08/30 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
python 删除系统中的文件(按时间,大小,扩展名)
2020/11/19 Python
Python try except else使用详解
2021/01/12 Python
HTML5本地存储localStorage、sessionStorage基本用法、遍历操作、异常处理等
2014/05/08 HTML / CSS
建筑施工安全生产责任书
2014/07/22 职场文书
员工团队活动方案
2014/08/28 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
歌咏比赛主持词
2015/06/29 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis