城市空气质量(AQI)数据爬虫
全国各城市(网页上有的)空气质量爬虫,包括城市名称,AQI等信息,保存为.csv文件格式
网址首页:https://www.aqistudy.cn/historydata/index.php
首先是获取城市名称模块,实质就是从网页上得到可检索的所有“城市”字符串列表;
import requests
from lxml import etree
import time
from urllib import parse
import pandas as pd
from selenium import webdriver
import urllib.parseheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.204 Safari/537.36'
}url = "https://www.aqistudy.cn/historydata/"
response = requests.get(url, headers=headers)
text = response.content.decode('utf-8')
html = etree.HTML(text)
city_set = list()
citys = html.xpath("//div[@class='all']/div/ul")
for city in citys:messages = city.xpath(".//li")for message in messages:city_name = message.xpath(".//a/text()")city_name = "".join(city_name)# print(city_name)city_set.append(city_name)
print(len(city_set))#输出可爬取的城市数量
print(city_set)#打印所有爬取的城市列表
然后确定所有城市的哪几年的哪几个月空气质量信息需要爬取;
def get_month_set():month_set = list()for i in range(1, 10):month_set.append(('2018-0%s' % i))# 这里目前只获取2018年前10个月for i in range(10, 13):month_set.append(('2018-%s' % i))# 这里获取2018年后2个月return month_set # 一页能看到一个月的数据,所以循环以月为单位即可
month_set = get_month_set()
month_set.reverse()
最后是数据爬取模块,目的从确定的城市和确定的年月中爬取数据;
driver = webdriver.PhantomJS(r'E:\phantomjs-2.1.1-windows\bin\phantomjs.exe')
base_url = 'https://www.aqistudy.cn/historydata/daydata.php?city='file_name = 'AQI_2018.csv'
fp = open(file_name, 'w', encoding='utf-8-sig')
fp.write('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n'%('city','date','AQI','grade','PM25','PM10','SO2','CO','NO2','O3_8h'))#表头for ct in range(0, len(city_set)):for i in range(len(month_set)):str_month = month_set[i]weburl = ('%s%s&month=%s' % (base_url, parse.quote(city_set[ct]), str_month))driver.get(weburl)time.sleep(1)dfs = pd.read_html(driver.page_source,header=0)[0]time.sleep(1) # 防止页面一带而过,爬不到内容if len(dfs) != 0:for j in range(0,len(dfs)):date = dfs.iloc[j,0]aqi = dfs.iloc[j,1]grade = dfs.iloc[j,2]pm25 = dfs.iloc[j,3]pm10 = dfs.iloc[j,4]so2 = dfs.iloc[j,5]co = dfs.iloc[j,6]no2 = dfs.iloc[j,7]o3 = dfs.iloc[j,8]fp.write(('%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' % (city_set[ct],date,aqi,grade,pm25,pm10,so2,co,no2,o3)))print('yes---%s,%s---DONE' % (city_set[ct], str_month))localtime = time.asctime(time.localtime(time.time()))print("time :", localtime)else:print('%s,%s--error' % (city_set[ct], str_month))localtime = time.asctime(time.localtime(time.time()))print("time :", localtime)
fp.close()
driver.quit()
print("已完成,谢谢!")
三部分模块连在一起即是完整的爬取全国城市空气质量的code;
其中,phantomjs.exe(百度搜索)及python包需要自行下载;
大部分代码是修改别人的,我在此基础上做了些优化,增加了功能,相关信息显示的会更加完善;
遇到疑似反爬虫的情况(run到一半就不动了),建议更换网络。
参考:
https://zhuanlan.zhihu.com/p/132496133 # 网页城市列表获取
https://blog.csdn.net/jancydc/article/details/107511400 #将城市循环,获取AQI
https://blog.csdn.net/weixin_40651515/article/details/84592530 #网络爬虫&获取AQI主体部分
城市空气质量(AQI)数据爬虫相关推荐
- 网络爬虫-爬取指定城市空气质量检测数据
爬取指定城市空气质量检测数据 网站链接 → https://www.aqistudy.cn/historydata/ 以月数据为例,见下图: 然后我们通过console调试可以发现 这个网页在item ...
- 基于Python的空气质量网络数据爬虫,构建面向深度学习数据预测的空气质量数据集
目录 1.目标 2. 思路 3.算法 3.1 算法流程 3.2 开发环境 4 核心代码 4.1 Header伪装 4.2 get_html_soup函数 4.3 get_city_link_list函 ...
- 全国369个城市空气质量月度数据(2013-2021)
1.数据来源:https://www.aqistudy.cn/historydata/ 2.时间跨度:2013-2021年 3.区域范围:全国369个城市 4.指标说明: 该数据指标包括:日期.AQI ...
- 全国城市空气质量实时数据(PM2.5)实时下载
国家公布了"http://113.108.142.147:20035/emcpublish/"空气质量实时发布平台,WCF服务地址为"http://113.108.142 ...
- 全国城市空气质量查询,PM2.5查询
一.接口介绍 提供全国城市空气质量实时数据,每小时更新.目前支持全国300+城市,可查询监测点数据.实时查询空气质量.小时粒度.实时给出空气质量AQI指数,并给出空气质量级别和首要污染物.广泛应用于交 ...
- 全国城市空气质量查询 PM2.5查询
一.接口介绍 提供全国城市空气质量实时数据,每小时更新.目前支持全国300+城市,可查询监测点数据.实时查询空气质量.小时粒度.实时给出空气质量AQI指数,并给出空气质量级别和首要污染物. 二.功能体 ...
- 全国113个城市空气质量的K均值聚类分析--基于R
下表给出了2017年全国113个环保重点城市空气质量年度数据(资料来源:中华人们共和国国家统计局).它们分别为:二氧化硫平均浓度(微克每立方米,),二氧化氮平均浓度(微克每立方米,);可吸入颗粒物(P ...
- 城市空气质量api 空气质量数据查询实现
现在人们越来越关注空气质量,在app中集成空气质量查询可以满足人们的查询需要,本次提供的城市空气质量api是集成了城市空气质量.城市空气PM2.5指数.城市辐射指数的应用数据接口,非常全面可靠. 接口 ...
- 全国城市空气质量实时发布平台数据抓取采集获取
全国城市空气质量实时发布平台(https://air.cnemc.cn:18007/ 原http://106.37.208.233:20035/)数据抓取采集获取,数据处理方法 import or ...
最新文章
- 使用 ThinkJS + Vue.js 开发博客系统
- 找到所有小于N的素数
- mysql自带查询优化_MySQL之select in 子查询优化的实现
- currenthashmap扩容原理_高并发编程系列:深入探讨ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)...
- Exchange 2010 创建设备室邮箱
- MFC CStringArray 字符串数组类 使用方法
- java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略
- 一个屌丝程序猿的人生(七十七)
- UI设计素材模板|表单的临摹学习技巧
- Google I/O 2019 行纪 —— Google 要让 AI 消除偏见
- asp.net 在repeater控件中加按钮
- HTTP请求报文与响应报文
- 基于RPM包的LAMP搭建
- PDF 文件如何转换从可以编辑的文本和word
- 单词记忆 词根词缀记忆 总结
- IBM TSM 6.3学习笔记(1)
- 御坂坂的c++学习之路(5)
- PCB软件对比分析(AD、Pads、Allegro)
- Linux DSA Net Switch驱动开发
- Windows10系统蓝屏解决方案