全国各城市(网页上有的)空气质量爬虫,包括城市名称,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)数据爬虫相关推荐

  1. 网络爬虫-爬取指定城市空气质量检测数据

    爬取指定城市空气质量检测数据 网站链接 → https://www.aqistudy.cn/historydata/ 以月数据为例,见下图: 然后我们通过console调试可以发现 这个网页在item ...

  2. 基于Python的空气质量网络数据爬虫,构建面向深度学习数据预测的空气质量数据集

    目录 1.目标 2. 思路 3.算法 3.1 算法流程 3.2 开发环境 4 核心代码 4.1 Header伪装 4.2 get_html_soup函数 4.3 get_city_link_list函 ...

  3. 全国369个城市空气质量月度数据(2013-2021)

    1.数据来源:https://www.aqistudy.cn/historydata/ 2.时间跨度:2013-2021年 3.区域范围:全国369个城市 4.指标说明: 该数据指标包括:日期.AQI ...

  4. 全国城市空气质量实时数据(PM2.5)实时下载

    国家公布了"http://113.108.142.147:20035/emcpublish/"空气质量实时发布平台,WCF服务地址为"http://113.108.142 ...

  5. 全国城市空气质量查询,PM2.5查询

    一.接口介绍 提供全国城市空气质量实时数据,每小时更新.目前支持全国300+城市,可查询监测点数据.实时查询空气质量.小时粒度.实时给出空气质量AQI指数,并给出空气质量级别和首要污染物.广泛应用于交 ...

  6. 全国城市空气质量查询 PM2.5查询

    一.接口介绍 提供全国城市空气质量实时数据,每小时更新.目前支持全国300+城市,可查询监测点数据.实时查询空气质量.小时粒度.实时给出空气质量AQI指数,并给出空气质量级别和首要污染物. 二.功能体 ...

  7. 全国113个城市空气质量的K均值聚类分析--基于R

    下表给出了2017年全国113个环保重点城市空气质量年度数据(资料来源:中华人们共和国国家统计局).它们分别为:二氧化硫平均浓度(微克每立方米,),二氧化氮平均浓度(微克每立方米,);可吸入颗粒物(P ...

  8. 城市空气质量api 空气质量数据查询实现

    现在人们越来越关注空气质量,在app中集成空气质量查询可以满足人们的查询需要,本次提供的城市空气质量api是集成了城市空气质量.城市空气PM2.5指数.城市辐射指数的应用数据接口,非常全面可靠. 接口 ...

  9. 全国城市空气质量实时发布平台数据抓取采集获取

    全国城市空气质量实时发布平台(https://air.cnemc.cn:18007/   原http://106.37.208.233:20035/)数据抓取采集获取,数据处理方法 import or ...

最新文章

  1. 使用 ThinkJS + Vue.js 开发博客系统
  2. 找到所有小于N的素数
  3. mysql自带查询优化_MySQL之select in 子查询优化的实现
  4. currenthashmap扩容原理_高并发编程系列:深入探讨ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)...
  5. Exchange 2010 创建设备室邮箱
  6. MFC CStringArray 字符串数组类 使用方法
  7. java获取cpu使用率_2019年阿里P8架构师的解析:最新Java性能测试、调优策略
  8. 一个屌丝程序猿的人生(七十七)
  9. UI设计素材模板|表单的临摹学习技巧
  10. Google I/O 2019 行纪 —— Google 要让 AI 消除偏见
  11. asp.net 在repeater控件中加按钮
  12. HTTP请求报文与响应报文
  13. 基于RPM包的LAMP搭建
  14. PDF 文件如何转换从可以编辑的文本和word
  15. 单词记忆 词根词缀记忆 总结
  16. IBM TSM 6.3学习笔记(1)
  17. 御坂坂的c++学习之路(5)
  18. PCB软件对比分析(AD、Pads、Allegro)
  19. Linux DSA Net Switch驱动开发
  20. Windows10系统蓝屏解决方案

热门文章

  1. AngularJS 整理学习
  2. 为什么好多网上的人都很自大
  3. mysql ndb集群
  4. 30岁的男人怎么样才算成功呢?
  5. 学计算机的女生后来怎样了
  6. ANSYS Fluent 电子产品散热计算案例
  7. 单体架构(Monolith)与微服务架构(MicroService)
  8. 回家的路总是那么曲折
  9. Minio Browser
  10. [转载]国画技法视频教学网址指南