空气质量数据下载

从pm25.in网站下载全国各个城市、各个站点逐小时空气质量数据。Github地址:https://github.com/lixiang-ucas/PM25

使用Urllib2和BeautifulSoup库进行数据抓取

 getUrlRespHtml是下载函数,设置了一些HTTP头

 getCities获取城市列表 

getCurrentHour获取当前一个小时的数据

__name__入口函数,每小时执行一次getCurrentHour


# -*- coding: utf-8 -*-
"""
Created on Tue Jan 26 14:28:14 2016


@author: lixiang
"""


import urllib2
import socket
import time
from bs4 import BeautifulSoup    #besutifulsoup的第三版  


import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )


sleep_time=30


def getUrlRespHtml(url):
    heads = {'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
            'Accept-Charset':'GB2312,utf-8;q=0.7,*;q=0.7', 
            'Accept-Language':'zh-cn,zh;q=0.5', 
            'Cache-Control':'max-age=0', 
            'Connection':'keep-alive', 
            'Host':'John', 
            'Keep-Alive':'115', 
            'Referer':url, 
            'User-Agent':'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.14) Gecko/20110221 Ubuntu/10.10 (maverick) Firefox/3.6.14'}
 
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
    urllib2.install_opener(opener) 
    req = urllib2.Request(url)
    opener.addheaders = heads.items()
#    respHtml = opener.open(req).read()
#    return respHtml.decode('gbk').encode('utf-8')
    try:
        respHtml = opener.open(req).read()
    except urllib2.HTTPError, e:
        print e.code
    return respHtml


def getCities():
    site='http://pm25.in'
    html = getUrlRespHtml(site)
    soup = BeautifulSoup(html) 
    hrefs = soup.find("div",{"class":"all"}).find_all('a')
    cs=[]
    for href in hrefs:
        c=href['href']
        c=c[1:len(c)]
        cs.append(c)
#    cs=cs[0:10]
    return list(set(cs))
    
def getCurrentHour():
    socket.setdefaulttimeout(60) # 60 秒钟后超时
    file_c = open('city.txt','w')
    file_s = open('site.txt','w')
#    cities=['beijing','tianjin','shanghai']
    cities=getCities()
    print 'city count is:'+str(len(cities))
#    city='tianjin'
    for city in cities:
        ind=cities.index(city)
        if ind%50==0:
            time.sleep(sleep_time)
        site ='http://pm25.in/' + city + '.html'  
        print str(ind)+' '+site
    #    html = urllib2.urlopen(site)  
        html = getUrlRespHtml(site)
        soup = BeautifulSoup(html) 
        #时间        
        dt = soup.find('div',{'class':'live_data_time'}).find('p').string
        dt = dt.split(':')[1]
        #城市数据
        cityAQI = soup.find_all("div",{"class":"value"})        
        file_c.write(city+'\t')
        file_c.write(dt+'\t')
        for ind_aqi in range(len(cityAQI)-1):
            aqi=cityAQI[ind_aqi]
            temp='-'
            if aqi.string!=None:
                file_c.write(aqi.string.split()[0]+'\t')
            else:
                file_c.write(temp+'\t')
        file_c.write('\n')
        #各个站点数据
        trs=soup.find_all('tr')
        for ind_s in range(1,len(trs)):
            file_s.write(city+'\t')
            file_s.write(dt+'\t')
            tr=trs[ind_s]
            siteAQI=tr.find_all('td')
            for aqi in siteAQI:
                temp='-'
                if aqi.string!=None:
                    file_s.write(aqi.string.split()[0]+'\t')
                else:
                    file_s.write(temp+'\t')
            file_s.write('\n')
        time.sleep(sleep_time) 
    file_c.close()
    file_s.close()


if __name__ == '__main__': 
    while True:
        getCurrentHour()
        time.sleep(3600)

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
空气质量数据csv下载是指通过网络或其他渠道获取并保存空气质量监测数据的csv格式文件。一般来说,这些数据包括空气质量指数(AQI)、各项污染物(如PM2.5、PM10、二氧化硫、二氧化氮等)的浓度、监测站点的位置等信息。 通过csv格式下载空气质量数据的好处是,csv文件具有简单、易读的特点,并且广泛被多种软件支持和识别。用户可以通过下载csv文件,方便地进行数据分析、统计和可视化,以加深对空气质量的了解。 在获取空气质量数据csv文件时,用户需要选择可靠的数据来源,如政府官方网站、环保部门或权威的研究机构发布的数据。这样可以保证数据的可信度和准确性。 下载空气质量数据csv文件的步骤通常是打开数据源网站,找到相关的数据下载页面或链接,选择所需的地区或时间范围,然后点击下载按钮或链接。下载完成后,用户可以将csv文件导入到数据处理软件或编程环境中,进行进一步的分析和可视化。 在使用下载空气质量数据csv文件时,用户需要注意数据的单位和格式,确保数据的正确解读和使用。同时,还应注意数据的时效性,因为空气质量数据通常是动态更新的,可以进行周期性的下载和更新以获取最新数据。 综上所述,通过空气质量数据csv下载,用户可以方便地获取、保存和使用空气质量监测数据,以推动环境保护和健康发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值