Python爬取真气网天气数据

使用工具:pycharm,Chrome driver
使用库:selenium
前言:
我们无时无刻不在呼吸着周围的空气,
可身边的空气质量怎样呢?
嗯~~~
大多数人会沉思一会儿,
最后还是会说:不知道。
我们平时看到的AQI只是环境综合指数,
有时并不能完全反应环境质量,
看来我们需要的是原始数据。
有了原始数据,
我们不但能分析现在的环境状况,
甚至还能对未来的环境状况做出自己的预测,
听起来是不是很XX呢。
古同还没找到直接在本页面下载的方法,
各位朋友可以,
后台回复:可执行文件,
可得到exe文件,
无需安装Python即可执行,
就算不会写爬虫,
也可以获得原始数据啦。
以下第一第二步为必读,
否则exe无法正常运行。
一、下载Chrome driver(必读)
这一步是无论执行.py还是.exe,
都要进行的一步,
在这一步我们要安装一个浏览器驱动插件,
相当于为我们的.py和.exe安装假肢。
首先,我们查看我们的浏览器版本,

image

打开后可以看到版本和操作系统位数,
我们要下载对应的驱动和Chrome版本相适应,
给大家推荐一个网址:

http://blog.csdn.net/huilan_same/article/details/51896672

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

image

二、安装Chrome driver(必读)
这里需要对环境变量进行配置,
首先我们要找到Chrome浏览器的安装位置,
最简单的方法是找到Google Chrome的快捷方式,
右击选择“打开文件位置”,
将路径复制下来,
例如我的路径为:

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

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

image

然后点击高级系统配置,

image

点击环境变量,

image

点击编辑,

image

将复制的Chrome路径粘贴到红框中,
别忘了用分号(;)与前面的路径分开,

image

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

image

OK,前期工作结束了,
上面两步是重点,
必须要学会的东西。
三、寻找提供原始数据的网站:
古同浏览了很多网站,
生态环境部官网、各市级环保网等等,
最后锁定了真气网,
网站数据来源真实可信,

image

历史数据网页链接:

https://www.aqistudy.cn/historydata/index.php

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()

个人公众号:此地古同

你可能感兴趣的:(Python爬取真气网天气数据)