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

个人公众号:此地古同

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容