天天看点

python爬虫天气数据_Python爬取真气网天气数据

使用工具:pycharm,Chrome driver

使用库:selenium

前言:

我们无时无刻不在呼吸着周围的空气,

可身边的空气质量怎样呢?

嗯~~~

大多数人会沉思一会儿,

最后还是会说:不知道。

我们平时看到的AQI只是环境综合指数,

有时并不能完全反应环境质量,

看来我们需要的是原始数据。

有了原始数据,

我们不但能分析现在的环境状况,

甚至还能对未来的环境状况做出自己的预测,

听起来是不是很XX呢。

古同还没找到直接在本页面下载的方法,

各位朋友可以,

后台回复:可执行文件,

可得到exe文件,

无需安装Python即可执行,

就算不会写爬虫,

也可以获得原始数据啦。

以下第一第二步为必读,

否则exe无法正常运行。

一、下载Chrome driver(必读)

这一步是无论执行.py还是.exe,

都要进行的一步,

在这一步我们要安装一个浏览器驱动插件,

相当于为我们的.py和.exe安装假肢。

首先,我们查看我们的浏览器版本,

python爬虫天气数据_Python爬取真气网天气数据

image

打开后可以看到版本和操作系统位数,

我们要下载对应的驱动和Chrome版本相适应,

给大家推荐一个网址:

根据自己Chrome浏览器的版本对应下载。

python爬虫天气数据_Python爬取真气网天气数据

image

二、安装Chrome driver(必读)

这里需要对环境变量进行配置,

首先我们要找到Chrome浏览器的安装位置,

最简单的方法是找到Google Chrome的快捷方式,

右击选择“打开文件位置”,

将路径复制下来,

例如我的路径为:

C:\Users\Gutong\AppData\Local\Google\Chrome\Application

然后,打开计算机——属性

python爬虫天气数据_Python爬取真气网天气数据

image

然后点击高级系统配置,

python爬虫天气数据_Python爬取真气网天气数据

image

点击环境变量,

python爬虫天气数据_Python爬取真气网天气数据

image

点击编辑,

python爬虫天气数据_Python爬取真气网天气数据

image

将复制的Chrome路径粘贴到红框中,

别忘了用分号(;)与前面的路径分开,

python爬虫天气数据_Python爬取真气网天气数据

image

最后将我们下载好的Chrome driver中的exe文件粘到Chrome路径下,

python爬虫天气数据_Python爬取真气网天气数据

image

OK,前期工作结束了,

上面两步是重点,

必须要学会的东西。

三、寻找提供原始数据的网站:

古同浏览了很多网站,

生态环境部官网、各市级环保网等等,

最后锁定了真气网,

网站数据来源真实可信,

python爬虫天气数据_Python爬取真气网天气数据

image

历史数据网页链接:

python爬虫天气数据_Python爬取真气网天气数据

image

四、分析网页:

由于网页数据是随时间进行变化的,

属于动态网页,

因此不宜采用静态网页的分析方法,

So我们选择selenium

五、写源码

首先引入所用库:

# -*- coding:utf-8-*-

#可以利用 webdriver 打开一个浏览器

from seleniumimport webdriver

#使时间中止至指定时间

import time

接着定义一个search()方法:

用来返回网页的信息,

def search(url):

#利用get()方法获取网页信息并返回

return driver.get(url)

接着再定义一个解析网页的方法:

def parse_one_page(page):

#查找出玩野中全部的 tr 标签并赋给 tr_list

tr_list =driver.find_elements_by_tag_name('tr')

return tr_list

当然不能忘了保存数据了,

def save_to_mysql(tr_list):

#在 D 盘创建一个 TXT 格式文件

with open(r'd:\data.txt','a',encoding='utf8') as f:

for i in range(1, len(tr_list)):

#找出 tr_list 中的全部 td 标签

td_list =tr_list[i].find_elements_by_tag_name('td')

dae = td_list[0].text

AQI = td_list[1].text

ql = td_list[2].text

PM2 = td_list[3].text

PM10 = td_list[4].text

SO2 = td_list[5].text

CO = td_list[6].text

NO2 = td_list[7].text

O3 = td_list[8].text

#将所得原始数据写入上面建立的 TXT 文件

f.write('{} {} {} {} {} {} {} {} {}\n'.format(dae,AQI,ql,PM2,PM10,SO2,CO,NO2,O3))

定义主函数:

def main()

#实现交互,输入城市和时间

area = input('请输入一个城市(例如[长春]):')

year = input('请输入一个年份(例如[2018]):')

print('正在抓取'+ area + '市' + year + '年' + '空气质量每日历史数据:' )

print('由于抓取数据较多,请您耐心等待:')

#定义全局变量 driver

global driver

#打开 Chrome 浏览器

driver = webdriver.Chrome()

#利用循环获取一年的原始数据

for i in range(1,13):

if i<10:

url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}0{}'.format(area,year,i)

else:

url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}{}'.format(area,year,i)

page = search(url)

time.sleep(1)

tr_list = parse_one_page(page)

save_to_mysql(tr_list)

print('抓取完毕')

print('文件存储在D:\data.txt')

最后调用主函数:

if __name__ =='__main__':

main()

大功告成了!!!

撒花

完整代码如下:

# -*- coding:utf-8-*-

#可以利用 webdriver 打开一个浏览器

from seleniumimport webdriver

#使时间中止至指定时间

import time

def search(url):

#利用get()方法获取网页信息并返回

return driver.get(url)

defparse_one_page(page):

#查找出玩野中全部的 tr 标签并赋给 tr_list

tr_list =driver.find_elements_by_tag_name('tr')

return tr_list

defsave_to_mysql(tr_list):

#在 D 盘创建一个 TXT 格式文件

withopen(r'd:\data.txt','a',encoding='utf8') as f:

for i in range(1, len(tr_list)):

#找出 tr_list 中的全部 td 标签

td_list =tr_list[i].find_elements_by_tag_name('td')

dae = td_list[0].text

AQI = td_list[1].text

ql = td_list[2].text

PM2 = td_list[3].text

PM10 = td_list[4].text

SO2 = td_list[5].text

CO = td_list[6].text

NO2 = td_list[7].text

O3 = td_list[8].text

#将所得原始数据写入上面建立的 TXT 文件

f.write('{} {} {} {} {} {} {} {} {}\n'.format(dae,AQI,ql,PM2,PM10,SO2,CO,NO2,O3))

def main()

#实现交互,输入城市和时间

area = input('请输入一个城市(例如[长春]):')

year = input('请输入一个年份(例如[2018]):')

print('正在抓取'+ area + '市' + year + '年' + '空气质量每日历史数据:' )

print('由于抓取数据较多,请您耐心等待:')

#定义全局变量 driver

global driver

#打开 Chrome 浏览器

driver = webdriver.Chrome()

#利用循环获取一年的原始数据

for i in range(1,13):

if i<10:

url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}0{}'.format(area,year,i)

else:

url ='https://www.aqistudy.cn/historydata/daydata.php?city={}&month={}{}'.format(area,year,i)

page = search(url)

time.sleep(1)

tr_list = parse_one_page(page)

save_to_mysql(tr_list)

print('抓取完毕')

print('文件存储在D:\data.txt')

if __name__ =='__main__':

main()

个人公众号:此地古同