前言:昨天起来去上班,出门发现空气是那么的浑浊,没有呼吸到一点新鲜空气。不用说肯定是PM2.5过高了,于是我想看看全国的空气质量是怎样的,并从中发现一些规律。
准备:
step1:网站分析。这里我们使用http://datacenter.mee.gov.cn/aqiweb2/这个网站可以实时获取全国的AQI,具体什么是AQI,大家可以自行百度。具体网站是这样的,左上角是AQI实时报和AQI日报,右上角显示的是当前日期。我们这里想要的是当天日期和这些数据,但是由于这些数据是实时滚动的,不同容易获取。但是可以发现这些数据是表格形式的,于是就想到了之前学的pandas。pandas中的read_html直接获取表格数据,得到的将是目标网页所有table表格的list集合。获取到list集合有两个值,一个是AQI实时报,另一个是AQI日报。
step2:环境准备: python3.7 ,pycharm编辑器和requests ,pandas,lmx库,没有安装这些库的可以自行安装。
开始:接下来我把自己的代码和大家分享一下,由于自己还是个小菜鸟,有错误的地方还请大家指出。在这里再和大家理一下思路:爬取网站信息—信息处理—信息保存—信息分析。
‘’‘引入库’‘’
import time
import requests
import pandas as pd
from lxml import etree
'''获取网页当前显示的日期并做处理'''
url = "http://datacenter.mee.gov.cn/aqiweb2/"
res = requests.get(url)
encoding = res.apparent_encoding #这一步是获取网页的编码格式,后面会用到。
parsed_text = etree.HTML(res.text) #lmx库解析网页数据
#print(parsed_text)
timestamp = parsed_text.xpath('/html/body/div[3]/p/i/text()')[0].replace('年','-')\
.replace('月','-').replace('日','-').replace('时',':00:00') #通过Xpath获取当前网页现实的时间,并使用replace方法做时间格式处理
运行结果如下,这样我们就得到了当前网站显示的日期:
'''使用pandas的read——html方法读取数据,并做数据列名的处理'''
data_res=pd.read_html('http://datacenter.mee.gov.cn/aqiweb2/',encoding="gb2312") #print(type(data_res)) 返回的是一个list型格式 data = data_res[0] #print(data) header = ['city', 'AQI', 'PM2.5', 'PM10', 'SO2', 'NO2', 'CO', 'O3', 'main_pollution'] data.columns = header data['time'] = timestamp print(data)
运行结果:
'''数据的保存''' write_header = True while 1: #使用while循环 600s if write_header is True: data.to_csv(r'C:\Users\Administrator\Desktop\day11\data.csv', index=False, mode='a', header=True) \ # header = True 保留列名 index=True 保留索引 write_header = False #print(write_header) else: # print("error") data.to_csv(r'C:\Users\Administrator\Desktop\day11\data1.csv', index=False, mode='a', header=False) #print('1234') print('Successfully crawled data of {} and saved it to file!'.format(timestamp)) time.sleep(600)
运行结果:
这样我把全国各城市的AQI数据就获取下来了,接下来就是对数据进行分析了,下篇文章再和大家分享!