空气质量指数月统计历史数据爬取

仅用不到20行代码爬取 空气质量指数月统计历史数据爬取

效果

图1 目标爬取数据 图2 最终实验效果

目录

  • 空气质量指数月统计历史数据爬取
  • 效果
  • 前言
  • I Package 安装与使用
  • II Citys 获取网站内的城市名
    • 2.1 Requset 获取内容
    • 2.2 Re 抽取信息
    • 2.3 url 需爬取的城市网站链接
  • III Webdriver 爬取网站表格数据‘
  • IV 完整代码

前言

自雾霾深度调查纪录片《柴静雾霾调查:穹顶之下》的出现后,有关环境问题的各种报道不断涌出,也使得各个学科领域针对环境问题发表诸多文献,如计量经济学中的对某某市的空气质量影响因素的计量经济学分析等等。

但在这其中,有关数据的获取永远是报道、分析的第一步!

下面,就让我们手把手from scratch地爬虫收集齐全国384个地区城市的空气质量指数月统计历史数据

I Package 安装与使用

安装:

!pip install lxml  -i https://pypi.douban.com/simple
!pip install selenium  -i https://pypi.douban.com/simple
!pip install urllib  # 这里没加国内镜像是因为没有urllib

使用:(如果你的环境还缺少下述包,请按上述方式进行pip)

import re
import time
import pandas as pdimport requests
from urllib import parse
from selenium import webdriver

除了在环境中安装上述包,只需再下载一个[phantomjs],根据你的Windows、Mac、Linux等选对应系统的一路安装,记住最终的安装地址即可。

II Citys 获取网站内的城市名

在此,给大家讲一种更简单上手的爬取网站内容的方法,requests + re:
  通过requsets获取网页内容
  通过re正则抽取信息

2.1 Requset 获取内容

首先获取网页信息,如下图

url = "https://www.aqistudy.cn/historydata/"
url_text = requests.get(url).text

此时,我们已经得到了这个url网页链接内的内容,如上图,可以发现,其中有很多类似的
  “<a href=“monthdata.php?city=阿坝州”>阿坝州\r\n”
而这其中的”阿坝州“就是我们想要的城市名称,那我们该怎么在这么复杂繁多的内容中提取出我们想要的信息,“阿坝州”呢?

2.2 Re 抽取信息

pattern =  re.compile(r'<a href="monthdata.php\?city=\w+">(\w+)</a>\r\n') # 要在?前加\转义符
citys = pattern.findall(url_text) # 获取384个城市名
print("已获取{}个城市名,第一个城市是{},最后一个城市是{}".format(len(citys),citys[0],citys[-1]))

接下来,我们便可以针对上述例句 “<a href=“monthdata.php?city=阿坝州”>阿坝州\r\n” 进行正则表达式的提取匹配,在此,你只需将例句复制,再把想要的部分换成(\w+)即可,如上述代码的pattern

使用正则表达式后,我们便可获取所有的城市名称。

2.3 url 需爬取的城市网站链接

获得所有城市名称后,也就获得了需要爬去网站的url网站链接:
你问我怎么知道的,我会告诉你,你多手戳几个城市,看浏览器上面的url就知道目标url的规律了

# 如北京,只需要在base_url + '北京'即可
base_url = 'https://www.aqistudy.cn/historydata/monthdata.php?city='
# 即北京:
beijing_url = base_url + '北京'

请注意,上述代码可行吗?对于人类可行的,不信你试试访问这个链接:

https://www.aqistudy.cn/historydata/monthdata.php?city=北京

但是对于程序而言,它并不能识别中文字符,需要将中文字符转成URL字符:

# from urllib import parse
# 第一步已经导入包了 urllib中的parse可以做到将中文字符转成URL字符:
beijing_url =  base_url + parse.quote('北京')

有了目标网页url网页链接,我们可以爬取网站表格数据了

III Webdriver 爬取网站表格数据‘

配置你刚刚下载的phantomjs的地址

driver = webdriver.PhantomJS(r'E:\\Tools\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')

在配置好phantomjs后,driver.get(city_url) 获取网页,再只需一步 driver.page_source 即可获取网页内的数据,此时的数据会是一个列表,取[0]即可获取所需DataFrame的内容。

for i,city in enumerate(citys):city_url = base_url + parse.quote(city) # 城市url网页链接driver.get(city_url) # 读取网页time.sleep(2) dataframe = pd.read_html(driver.page_source)[0] # 读取dataframetime.sleep(1)# 改成你需要保存数据的地址dataframe.to_csv(r'E:\\Data\\%s.csv'% (str(city)),mode='a+',encoding='utf_8_sig') print("第{}个城市:{} 已收集完".format(i+1,city))
driver.quit()
print('已收集完!')

注意,这里的time.sleep要根据你的网络加载时间延长,笔者第一次使用时只设置了1s,导致最终很多的CSV表格数据都是1KB,没有加载下来。

至此,所有有关数据都被加载成csv保存在你设置的地址中了,不过你会发现有几个城市的csv文件只有1KB,没错,因为那几个城市网站上没有数据,只有图表。

IV 完整代码

import re
import time
import pandas as pdimport requests
from urllib import parse
from selenium import webdriverurl = "https://www.aqistudy.cn/historydata/"
url_text = requests.get(url).textpattern =  re.compile(r'<a href="monthdata.php\?city=\w+">(\w+)</a>\r\n') # 要在?前加\转义符
citys = pattern.findall(url_text) # 获取384个城市名
print("已获取{}个城市名,第一个城市是{},最后一个城市是{}".format(len(citys),citys[0],citys[-1]))base_url = 'https://www.aqistudy.cn/historydata/monthdata.php?city='
driver = webdriver.PhantomJS(r'E:\\Tools\\phantomjs-2.1.1-windows\\bin\\phantomjs.exe')for i,city in enumerate(citys):city_url = base_url + parse.quote(city)driver.get(city_url)time.sleep(2)dataframe = pd.read_html(driver.page_source)[0]time.sleep(1)dataframe.to_csv(r'E:\\Data\\%s.csv'% (str(city)),mode='a+',encoding='utf_8_sig')print("第{}个城市:{} 已收集完".format(i+1,city))
driver.quit()
print('已收集完!')

空气质量指数月统计历史数据爬取相关推荐

  1. 抓取空气质量指数AQI_PM2.5历史数据,可视化展示

    抓取空气质量指数AQI_PM2.5历史数据,可视化展示: url='http://www.tianqihoubao.com/aqi/hangzhou-201810.html'杭州的空气质量数据,可以在 ...

  2. BiliBili系列(二):个人历史数据爬取与分析

    文章目录 一.使用cookie进行登录 二.个人历史数据爬取 三.数据清洗 四.数据分析 完整代码链接:查看 一.使用cookie进行登录 我们已经进行了模拟用户登录并获取了cookie,所以在爬取的 ...

  3. python三国演义人物出场统计_python爬取三国演义文本

    1.目标 python爬取三国演义,生成词云.图表 2.码前须知 项目目标:三国人物名称及出现次数-----数据统计分析 提出问题:哪个人物在三国演义中出现的次数最多?,我们希望通过数据分析来获得答案 ...

  4. 让米帝领事馆给你报空气质量(动态网页爬取及简单的数据整理)

    自从有娃以后,很久没有时间好好摸一摸编程了,周末的时候正好出门溜娃,就想到了空气质量的问题,虽然有APP啊上海发布啊之类的可以查,但我偏偏就是手贱要爬米帝领事馆的数据.(PM2.5监测网上的监测站点更 ...

  5. 词云制作与词性统计——采用爬取的歌曲评论数据

    文章目录 前言 一.评论数据清洗整理 二.词云与词性统计 1.词云制作 2. 词性统计 3. 词云与词性部分的全部代码 三.selenium评论获取部分 总结 前言 python课实验, 将爬取到QQ ...

  6. Swaggy教你用python实现NBA数据统计的爬取

    相信很多喜欢NBA的小伙伴们经常会关注NBA的数据统计,今天我就用虎扑NBA的得分榜为例,实现NBA数据的简单爬取. https://nba.hupu.com/stats/players是虎扑体育的N ...

  7. mysql好评中评统计_scrapy爬取京东笔记本及评论信息存入MySQL数据库

    爬取思路 1.分析页面,定义爬取字段 2.观察网页,分析接口url,通过xpath和json解析爬取内容字段 3.在pipelines.py写入存储方式 4.开始爬取 5.GitHub地址:https ...

  8. 中金所金融期货日统计数据爬取

    基本思路 构造URL下载每个交易日统计的附件csv文件,提取csv文件中的次月交割的股指期货统计数据 代码块 from io import StringIO import csv import url ...

  9. 空气质量指数日历史数据

    空气质量指数日历史数据 简单易行的空气质量指数日历史数据爬取 效果 图1 目标爬取数据 图2 最终实验效果 目录 空气质量指数日历史数据 效果 前言 I Package 安装与使用 II Citys ...

  10. python爬取某城市各监测站点历史空气质量数据

    python爬取某城市各监测站点历史空气质量数据 引言 正文 一.安装Web driver 二.安装selenium 三.数据爬取 引言 由于要使用某地各监测站点的空气质量数据做数据预测,因此需要去网 ...

最新文章

  1. javascript创建对象
  2. 资源贴|吴恩达新课发布第1天,3万人观看 | 完整PPT
  3. VR+监狱,分分钟让犯罪分子重新做人
  4. 浙江省计算机vb二级考试题库,浙江省计算机二级vb上机试题题库..doc
  5. 从S3中导入数据到Dynamodb
  6. mysql的表创建_MYSQL表创建
  7. Arm架构下VUE环境的安装
  8. 2020 年开发者生态报告:Python超越Java,Go、Kotlin强势崛起
  9. java对数据库的操作_java对数据库的操作(jdbc)
  10. centos 7 mysql 导入_linux centos7.3导出、导入、Mariadb(MySQL)数据库命令
  11. python交换两个值原理_python 两数交换新写法原理
  12. vue2.0 $set()的用法
  13. AWVS12搭建-Ubuntu
  14. 数字图像处理(19): 边缘检测算子(Roberts算子、Prewitt算子、Sobel算子 和 Laplacian算子)
  15. Linux安装及管理程序
  16. (疯狂的石头)阿弥陀佛,上帝保佑铃声 (疯狂的石头)阿弥陀...
  17. Google 机器学习术语表
  18. PC端实现微信支付功能(Vue2.0)
  19. linux中的lsof命令简介
  20. 国产迪王耀全球(上)

热门文章

  1. 基于 Amazon SageMaker 构建物流需求量预测解决方案
  2. CINTA拉格朗日定理
  3. idea报错解决办法:Error executing Maven. The specified user settings file does not exist: C:\Users\Gmx\.m2\
  4. 2016.03.07错误记录
  5. 终极讲师介绍:集齐 27 位大神召唤亚洲首届 Rust 开发者大会!
  6. 图解QQ空间日志爬虫的全部日志获取与日志实际地址分析.
  7. C# winform cefsharp 截取网页元素图片
  8. Win11找不到xinput1_3.dll怎么办?
  9. mongodb一致性协议_Mongodb选举机制
  10. android银河城游戏,Endless Memories安卓版