2021SC@SDUSC 项目实训-AQI数据获取

2021SC@SDUSC


一、数据来源

根据对相关内容论文的阅读[1] Yu Zheng, Furui Liu, Hsun-Ping Hsie. U-Air: When Urban Air Quality Inference Meets Big Data. 19th SIGKDD conference on Knowledge Discovery and Data Mining (KDD 2013).
[2] Yu Zheng, Xuxu Chen, Qiwei Jin, Yubiao Chen, Xiangyun Qu, Xin Liu, Eric Chang, Wei-Ying Ma, Yong Rui, Weiwei Sun. A Cloud-Based Knowledge Discovery System for Monitoring Fine-Grained Air Quality. MSR-TR-2014-40.
[3]Yu Zheng, Xiuwen Yi, Ming Li, Ruiyuan Li, Zhangqing Shan, Eric Chang, Tianrui Li. Forecasting Fine-Grained Air Quality Based on Big Data. In the Proceeding of the 21th SIGKDD conference on Knowledge Discovery and Data Mining (KDD 2015).
结合实际情况,我计划从多种渠道获取数据来源。初步计划包括但不限于AQI实时数据,天气相关数据(风速,温度,气压,湿度),路网数据(路网密度),poi(Point of Interest兴趣点)。

二、数据的获取

首先最需要获得的数据就是实时的现有站点的AQI数据,经过多方查找,终于找到了一个非常权威的网站,http://fb.sdem.org.cn:8801/AirDeploy.Web/AirQuality/MapMain.aspx。这是山东省生态环境厅的官方数据发布。我们在此简单使用。介绍使用方法,首先针对一个网页想要爬取,首先应该右键检查元素,但是我们发现这个界面右键没有反应。不用担心,非常简单。
只需要在浏览器中禁用JavaScript,重新进入网页就可以开始使用右键了。
在这里插入图片描述
但是很不好的事情是我们发现地图不显示,然后我们不要关闭页面,重新启用JavaScript刷新就成功了。
该网页是aspx格式,所有数据动态相应,所以我们看一看这些数据是怎么得到的。

在这里插入图片描述
通过查找发现每次点击会产生请求并且返回可用值。我们模拟这个请求就可以完成爬取了。
在这里插入图片描述
在这里插入图片描述

from urllib.parse import urlencode
import random
import requests
import traceback
from time import sleep
import json
import csv
import pandas as pd
from lxml import etree
import datetime
base_url = 'http://fb.sdem.org.cn:8801/AirDeploy.Web/Ajax/AirQuality/AirQuality.ashx?'  #这里要换成对应Ajax请求中的链接 每小时20分
headers = {
    
    
输入自己的请求头

}
StationID_list = [68,67,4579]
col_name = []
for i in range(len(StationID_list)+1):
    col_name.append(i)
aqi=[['t1']]

for i in range(len(StationID_list)):
    sleep(random.uniform(2, 3))
    data = {
    
    
                'Method': 'GetQualityItemsValues',
                'StationID': StationID_list[i] #2,4,7,6,10470,3,2987,5,56,54,55
            }
    url = base_url + urlencode(data)
    response = requests.request("POST",url, headers = headers)
    #print(response)
    re = response.content.decode('utf-8')
    #print(re)
    re = json.loads(re)
    aqi[0].append(re['AQI'])
df = pd.DataFrame(columns=col_name, data=aqi)
df.to_csv('./input/aqi.csv',index=False,columns=None, header=None)

这里注意获取到的数据格式其实是json形式的,我们通过json.loads()完成编码就可以轻松通过索引访问。

猜你喜欢

转载自blog.csdn.net/m0_46306466/article/details/124357415