系统讲解如何使用Python采集全国1000+环境监测站点实时空气质量数据。这是我录制的第一个视频教程,讲得不好还请大家海涵。
请大家不要频繁的去抓取这个网站,避免网站过载宕机,做一个有道德的城市规划师。
百度文库上有监测站点的坐标文件,字段链接后即可进行空间数据分析。本视频未包括该步骤讲解,后续正式视频会有这方面的内容。请保证网络状况良好,否则可能抛出异常,大家也可自行添加异常处理代码。
高清视频请移步:https://v.qq.com/x/page/g0386bt6wg0.html
代码如下:
# -*- coding: utf-8 -*-
import requests
from lxml import etree
def get_city_lst():
res = requests.get('http://www.tianqihoubao.com/aqi/')
html = res.text
res = etree.HTML(html)
data = res.xpath('//*[@class="citychk"]/dl//a/@href')
city_lst = list(set(data))
return city_lst
def download_data(path,city_lst):
fl = open(path,'w')
for city in city_lst:
res = requests.get('http://www.tianqihoubao.com' + city)
html = res.text
res = etree.HTML(html)
data = res.xpath('//table//td/text()')
data = ''.join(data).strip().replace(' ','').split()
city_name = res.xpath('//h1/text()')[0].split(u'空气')[0]
data = [i.encode('gbk') for i in data]
for i in range(0,len(data)/9):
da = data[i*9:(9+(i*9))]
fl.writelines(city_name.encode('gbk') + ',' + ','.join(da))
fl.writelines('\n')
print city_name + u'下载完成!'
fl.close()
if __name__ == "__main__":
path = './data/pm25_all.csv'
city_lst = get_city_lst()
download_data(path,city_lst)
print u'全部数据下载完成!'