python获取全国城市pm2.5、臭氧等空气质量过程解析

随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空气质量指数分析,这里是笔者自己实现的一个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);
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 首先来到目标数据的网页 http://www.weather.com.cn/weather40d/101280701.shtml 我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有部分页面刷新了,就是天气数据的那块,而URL没有变化. 这是因为网页前端使用

  • python可视化爬虫界面之天气查询

    执行效果如下: from tkinter import * import urllib.request import gzip import json from tkinter import messagebox root = Tk() def main(): # 输入窗口 root.title('Python学习交流群:973783996') # 窗口标题 Label(root, text='请输入城市').grid(row=0, column=0) # 设置标签并调整位置 enter = E

  • python结合API实现即时天气信息

    python结合API实现即时天气信息 import urllib.request import urllib.parse import json """ 利用"最美天气"抓取即时天气情况 http://www.zuimeitianqi.com/ """ class ZuiMei(): def __init__(self): self.url = 'http://www.zuimeitianqi.com/zuimei/quer

  • Python爬虫实例扒取2345天气预报

    寒假里学习了一下Python爬虫,使用最简单的方法扒取需要的天气数据,对,没听错,最简单的方法.甚至没有一个函数封装.. 网址:http://tianqi.2345.com/wea_history/53892.htm 火狐中右键查看网页源代码,没有发现天气数据,因此推断网页采用的json格式数据. 右击->查看元素->网络->JS,找到了位置 用Python爬虫下载为json格式数据存储下来,代码如下: #-*- coding:utf-8 -*- import urllib2 impor

  • Python实现从百度API获取天气的方法

    本文实例讲述了Python实现从百度API获取天气的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: __author__ = 'saint' import os import urllib.request import urllib.parse import json class weather(object):     # 获取城市代码的uri     code_uri = "http://apistore.baidu.com/microservice/cityinfo?

  • Python天气预报采集器实现代码(网页爬虫)

    爬虫简单说来包括两个步骤:获得网页文本.过滤得到数据. 1.获得html文本. python在获取html方面十分方便,寥寥数行代码就可以实现我们需要的功能. 复制代码 代码如下: def getHtml(url): page = urllib.urlopen(url) html = page.read() page.close() return html 这么几行代码相信不用注释都能大概知道它的意思. 2.根据正则表达式等获得需要的内容. 使用正则表达式时需要仔细观察该网页信息的结构,并写出正

  • 基于Python实现定时自动给微信好友发送天气预报

    效果图 from wxpyimport * import requests from datetimeimport datetime import time from apscheduler.schedulers.blockingimport BlockingScheduler#定时框架 bot = Bot(cache_path=True) tuling = Tuling(api_key=你的api')#机器人api def send_weather(location): #准备url地址 pa

  • Python实战之制作天气查询软件

    前言 本文主要给大家介绍的是关于Python制作天气查询软件,下面话不多说了,来一起看看详细的介绍吧 效果图 以前,给大家分享了如何使用 PyQt5 制作猜数游戏和计时器,这一次,我们继续学习:如何使用 PyQt5 制作天气查询软件. 源代码和 exe 文件: github 地址:https://github.com/xflywind/Python-Application 本地下载:http://xiazai.jb51.net/201905/yuanma/weather-python(jb51.

  • python获取全国城市pm2.5、臭氧等空气质量过程解析

    随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施,所以实现起来比较麻烦,最好的办法就是使用现成的免费接口,空气质量指数分析,这里是笔者自己实现的一个python调用方式 代码如下: # -*- coding: utf-8 -*- # flake8: noqa __author__ = 'wukong' import urllib from urllib import urlencode #配置您申请的ap

  • python获取全国最新省市区数据并存入表实例代码

    本文通过调取高德行政区划查询接口,获取最新的数据信息(省.市.区.经纬度.行政级别.城市编码.行政编码等),并通过mysql.connector存入mysql数据库 表结构设计如下: CREATE TABLE `districts` ( `districtId` int(11) NOT NULL AUTO_INCREMENT, `districtPid` int(11) DEFAULT NULL COMMENT '上级ID', `name` varchar(32) DEFAULT NULL CO

  • JS获取表格视图所选行号的ids过程解析

    这篇文章主要介绍了JS获取表格视图所选行号的ids过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 实例化数组 遍历所选行push到数组中 将数组join转换为以,分割的字符串 /*获取指定id的datagrid的表格视图的选择的ids*/ function getDataGridSelectRowIDS(id){ var ids = []; var rows = $('#'+id).datagrid('getSelections');

  • python多线程+代理池爬取天天基金网、股票数据过程解析

    简介 提到爬虫,大部分人都会想到使用Scrapy工具,但是仅仅停留在会使用的阶段.为了增加对爬虫机制的理解,我们可以手动实现多线程的爬虫过程,同时,引入IP代理池进行基本的反爬操作. 本次使用天天基金网进行爬虫,该网站具有反爬机制,同时数量足够大,多线程效果较为明显. 技术路线 IP代理池 多线程 爬虫与反爬 编写思路 首先,开始分析天天基金网的一些数据.经过抓包分析,可知: ./fundcode_search.js包含所有基金的数据,同时,该地址具有反爬机制,多次访问将会失败的情况. 同时,经

  • Python使用mongodb保存爬取豆瓣电影的数据过程解析

    创建爬虫项目douban scrapy startproject douban 设置items.py文件,存储要保存的数据类型和字段名称 # -*- coding: utf-8 -*- import scrapy class DoubanItem(scrapy.Item): title = scrapy.Field() # 内容 content = scrapy.Field() # 评分 rating_num = scrapy.Field() # 简介 quote = scrapy.Field(

  • Python爬取YY评级分数并保存数据实现过程解析

    前言 当需要进行大规模查询时(比如目前遇到的情形:查询某个省所有发债企业的YY评级分数),人工查询显然太过费时,那就写个爬虫吧. 由于该爬虫实在过于简单,就只简单概述下. 一.请求端 通过观察YY评级的网页信息,如下图(F12或右击进入检查,点击network->XHR->headers). 红色框表明是个get请求(其实这种网页基本都是Ajax get,需要总结实际url的规律的). 绿色框即为实际URL,通过分析该URL,其由两部分组成.前半部分为" https://web.ra

  • 基于Python获取城市近7天天气预报

    这篇文章主要介绍了基于Python获取城市近7天天气预报,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先,我们打开中国天气网,找到黄石市近7天天气的网页. http://www.weather.com.cn/weather/101200601.shtml 然后按F12开始分析网页结构,找到各个标签,并分析它们的作用.h1:日期:p:天气:tem-span:最高温:tem-i:最低温:win:风:em:风向:win-i:风力. 接下来,我们需

  • python获取天气接口给指定微信好友发天气预报

    先看下效果图: 用到的模块: PyMySQL requests threading wxpy 要实现上面的示例,首先是有两大块地方 获取天气信息 通过微信将天气信息发送出去 而获取天气信息又包括几个小的需要注意的地方 获取天气信息 获取天气信息的接口 获取天气信息的城市 获取所在城市的城市码 假如我们给多个人发送天气情况,这几个人来自不同的城市,那么我们不可能每次都要输入城市名,然后查找城市码,然后再访问接口,获取天气情况,这样会非常的麻烦,所以我们需要考虑将城市名跟城市码一一对应起来,说到一一

  • Python机器学习之手写KNN算法预测城市空气质量

    目录 一.KNN算法简介 二.KNN算法实现思路 三.KNN算法预测城市空气质量 1. 获取数据 2. 生成测试集和训练集 3. 实现KNN算法 一.KNN算法简介 KNN(K-Nearest Neighbor)最邻近分类算法是数据挖掘分类(classification)技术中常用算法之一,其指导思想是"近朱者赤,近墨者黑",即由你的邻居来推断出你的类别. KNN最邻近分类算法的实现原理:为了判断未知样本的类别,以所有已知类别的样本作为参照,计算未知样本与所有已知样本的距离,从中选取与

  • 用 Python 绘制全国鸿星尔克门店分布图

    目录 1.需求分析 2.发送请求 3.数据处理 1.需求分析 首先我们打开地图搜索“鸿星尔克”: F12打开浏览器开发者模式,找到如下链接. 复制该链接到浏览器,发现这是一个json格式的数据集.我们所需要的省份和对应数量还有各个城市对应的数量都在其中. 2.发送请求 我们首先模拟浏览器来发送请求获取到这个json数据集,然后获取各个城市鸿星尔克门店及其对应数量 . url = 'https://map.baidu.com/?newmap=1&reqflag=pcmap&biz=1&

随机推荐