Python爬取逐小時(shí)的AQI數(shù)據(jù)

最近做了一點(diǎn)微小的工作趟咆,從環(huán)保部數(shù)據(jù)中心的官網(wǎng)中爬取每個(gè)城市逐日的AQI(空氣質(zhì)量指數(shù))添瓷,現(xiàn)記錄一下過(guò)程,方便日后回憶值纱。
這也是第一次用Python寫爬蟲鳞贷,發(fā)現(xiàn)python真的是蠻容易上手的一個(gè)工具,學(xué)會(huì)基本的語(yǔ)法后虐唠,看一些案例悄晃,自己動(dòng)手調(diào)試,大概一周時(shí)間斷斷續(xù)續(xù)寫完的。
寫代碼永遠(yuǎn)是最后的步驟妈橄,在此之前庶近,你需要對(duì)自己做什么,怎么完成有一個(gè)規(guī)劃眷蚓,這樣做起來(lái)才事半功倍鼻种。


觀察所要抓取的數(shù)據(jù)——所要抓取的信息怎么得到——如何抓取下一頁(yè)信息——怎樣保存

通過(guò)分析,我找到網(wǎng)頁(yè)中所有抓取的文件都保存在名為report1這個(gè)表格中沙热;
http://datacenter.mep.gov.cn/report/air_daily/airDairyCityHour.jsp?city=&startdate=2016-12-02%2012:00&enddate=2016-12-02%2012:00&page=2
網(wǎng)址的構(gòu)造如上所示叉钥,表示2016年12月2日中午12點(diǎn)AQI數(shù)據(jù)的第二頁(yè),據(jù)此分析篙贸,我們就可以構(gòu)造每一頁(yè)對(duì)應(yīng)的網(wǎng)址投队;
最后通過(guò)xlwt庫(kù)將我們抓取的數(shù)據(jù)保存到EXCEL中。


  • 導(dǎo)入所需要的庫(kù)
    from urllib2 import urlopen, Request from bs4 import BeautifulSoup import xlwt import datetime

  • 訪問(wèn)網(wǎng)址

def getBS(url):
    header = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
    req = Request(url, headers=header)
    html = urlopen(req)
    bsObj = BeautifulSoup(html, 'html.parser')
    return bsObj
  • 找到總頁(yè)數(shù)
def getTotalPagesNum(htmltree):
    a = htmltree.findAll('font', {'color': '#004e98'})
    return a[1].get_text()
  • 打印每一頁(yè)的信息
def getPageInfo(htmltree):
    # 找到空氣質(zhì)量的表格
    table = htmltree.find('table', {'id': 'report1'})
    rows = table.findAll('tr', {'height': '30'})
    # 將每一條數(shù)據(jù)輸出到屏幕且保存到Items爵川,Items中保存了所有AQI信息
    for i in range(2, len(rows)):
        data = rows[i].findAll('td')
        AQIItems = str()
        for item in data:
            AQIItems += item.get_text() + '    '
        print AQIItems
        Items.append(AQIItems)
  • 打印表頭和每一頁(yè)的信息
def printInfo(BSObj, baseurl):
    # 找到總頁(yè)碼數(shù),在屏幕上打印出表頭
    pages = getTotalPagesNum(BSObj)
    table = BSObj.find('table', {'id': 'report1'}).findAll('tr', {'height': '30'})
    Attrs = table[1].findAll('td')
    TableHeader = ''
    for Attr in Attrs:
        TableHeader += Attr.get_text() + '    '
    print TableHeader  # 顯示表頭字段名稱

    # 在屏幕上顯示查詢結(jié)果并保存
    for i in range(1, int(pages) + 1):
        url = baseurl + '&page=' + str(i)
        bs = getBS(url)
        getPageInfo(bs)
  • 保存到EXCEL
def saveExcel(AQIdata):
    attrs = ['序號(hào)', '城市', '時(shí)間', 'AQI指數(shù)', '空氣質(zhì)量級(jí)別' , '首要污染物']
    wbk = xlwt.Workbook(encoding='utf-8')
    sheet1 = wbk.add_sheet('sheet1')
    cursor = 0
    # 輸入各字段名稱
    for attr in attrs:
        sheet1.write(0, cursor, attr)
        cursor += 1

    row = 1
    for AQIitem in AQIdata:
        lis = AQIitem.split('    ')
        col = 0
        for ls in lis:
            sheet1.write(row, col, ls)
            col += 1
        row += 1
    filename = ur'AQIData.xls'
    wbk.save(filename)

將上面的函數(shù)綜合起來(lái)敷鸦,寫到主函數(shù)中:

def main():
    print '- '*30
    # startdate = raw_input('請(qǐng)輸入起始日期(如2016-09-07):')
    # starttime = raw_input('請(qǐng)輸入起始時(shí)間(如20:00):')
    # enddate = raw_input('請(qǐng)輸入結(jié)束日期(如2016-09-08):')
    # endtime = raw_input('請(qǐng)輸入結(jié)束時(shí)間(如18:00):')
    # isallcity = raw_input('是否查詢所有城市?(Y/N)')
    # if isallcity[0].lower() == 'n':
    #     city = raw_input('請(qǐng)輸入要查詢城市(如北京市):')
    # else:
    #     city = ''
    # 打開空氣質(zhì)量界面

    baseurl = 'http://datacenter.mep.gov.cn/report/air_daily/airDairyCityHour.jsp?city=&startdate=2016-10-10%2000:00&enddate=2016-10-17%2000:00'



    BSObj = getBS(baseurl)
    global Items
    Items = []
    # 將信息輸出到屏幕
    printInfo(BSObj, baseurl)
    # 存儲(chǔ)到表格中
    saveExcel(Items)

備注:
1寝贡、實(shí)際情況下扒披,此網(wǎng)址查詢速度極慢,我零零散散下了16個(gè)txt文件圃泡,才下完6w+條數(shù)據(jù)碟案。
2、此處為了方面颇蜡,直接將網(wǎng)址寫到了代碼里价说,可根據(jù)自己的需要,設(shè)計(jì)一些交互式操作风秤,參考主函數(shù)里面的注釋部分鳖目。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唁情,隨后出現(xiàn)的幾起案子疑苔,更是在濱河造成了極大的恐慌甫匹,老刑警劉巖甸鸟,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異兵迅,居然都是意外死亡抢韭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門恍箭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)刻恭,“玉大人,你說(shuō)我怎么就攤上這事△⒓郑” “怎么了鞍匾?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)骑科。 經(jīng)常有香客問(wèn)我橡淑,道長(zhǎng),這世上最難降的妖魔是什么咆爽? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任梁棠,我火速辦了婚禮,結(jié)果婚禮上斗埂,老公的妹妹穿的比我還像新娘符糊。我一直安慰自己,他們只是感情好呛凶,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布男娄。 她就那樣靜靜地躺著,像睡著了一般把兔。 火紅的嫁衣襯著肌膚如雪沪伙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天县好,我揣著相機(jī)與錄音围橡,去河邊找鬼。 笑死缕贡,一個(gè)胖子當(dāng)著我的面吹牛翁授,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晾咪,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼收擦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了谍倦?” 一聲冷哼從身側(cè)響起塞赂,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎昼蛀,沒想到半個(gè)月后宴猾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叼旋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年仇哆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夫植。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讹剔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情延欠,我是刑警寧澤陌兑,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站由捎,受9級(jí)特大地震影響诀紊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜隅俘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一邻奠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧为居,春花似錦碌宴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至膳凝,卻和暖如春碑隆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蹬音。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工上煤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人著淆。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓劫狠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親永部。 傳聞我的和親對(duì)象是個(gè)殘疾皇子独泞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 基礎(chǔ)1.r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義2.'''...'''表示多行內(nèi)容3. 布爾值:True、False(...
    neo已經(jīng)被使用閱讀 1,660評(píng)論 0 5
  • 前端時(shí)間自學(xué)了python的基本語(yǔ)法苔埋,為深入了解python懦砂,就打算真正的鼓搗些東西,加深記憶组橄。據(jù)說(shuō)荞膘,pyth...
    wsdadan閱讀 322評(píng)論 0 0
  • 在上一篇中 , 我們構(gòu)建了一個(gè)爬蟲晨炕, 可以通過(guò)跟蹤鏈接的方式下載我們所需的網(wǎng)頁(yè)衫画。 但是爬蟲在下載網(wǎng)頁(yè)之后又將 結(jié)果...
    楓灬葉閱讀 1,953評(píng)論 0 5
  • 我叫姚發(fā) 我是個(gè)“名人” 一個(gè)特別不出名的人 身邊的人叫我“姚總” 毫不夸張的說(shuō),我認(rèn)識(shí)的老總 他們的身價(jià)加起來(lái)都...
    姚發(fā)閱讀 1,022評(píng)論 0 1
  • 很少有人敢質(zhì)疑權(quán)和威的合理性,于是這世界變得安寧费奸。
    華北燕閱讀 192評(píng)論 0 0