04_中央氣象臺

簡述

再次進行分析抓取氣象數(shù)據(jù)練習西疤,本節(jié)主要抓取預報氣象數(shù)據(jù)。抓取數(shù)據(jù)請勿存檔甩鳄,商用請聯(lián)系官方很洋。

爬取對象

抓取中央氣象臺城市預報數(shù)據(jù)

城市預報數(shù)據(jù)

使用包

import pymssql # MS Sql Server 操作
from bs4 import BeautifulSoup
import time, os 
import requests
import datetime

實現(xiàn)步驟

1底哗、抓取對象初步分析
  • 通過F12捕獲頁面內(nèi)容岁诉,分析頁面加載內(nèi)容,得知目標對象主要分為兩部分跋选,點擊后續(xù)預測某日,下方切換顯示具體時刻哗蜈。
頁面分析
  • 分析總結(jié)主體抓取步驟如下
Start
1前标、download_page("http://www.nmc.cn/f/rest/province") # 請求所有直轄市、省列表 list x
2距潘、download_page("http://www.nmc.cn/f/rest/province/x") # 請求 x 下所有城市列表 list y
3炼列、download_page("http://www.nmc.cnpublish/forecast/zzz/z.html"),# 請求城市 z 頁面內(nèi)容音比,并從中過濾出目標對象
4俭尖、循環(huán)目標對象中每天詳細預測數(shù)據(jù),存儲至數(shù)據(jù)庫
End_定時重復上述步驟
  • 因?qū)︻A測全天數(shù)據(jù)中氣象氣溫數(shù)據(jù)含義不了解,估放棄全天數(shù)據(jù)抓取稽犁,僅抓取預測時刻數(shù)據(jù)
全天數(shù)據(jù)
2焰望、抓取對象深入分析
預測時刻數(shù)據(jù)
  • 分析總結(jié)后續(xù)需注意以下問題
1、數(shù)據(jù)以表格形式顯示已亥,列頭為時刻(與常規(guī)數(shù)據(jù)存儲習慣相反)熊赖,后續(xù)讀取數(shù)據(jù)需按列分組
2、所有數(shù)據(jù)第一列為說明虑椎,后續(xù)為 8 個時刻數(shù)據(jù)(間隔 3 小時)震鹉;“今天”第一列為最近的時刻,后續(xù)所有日期數(shù)據(jù)第一列為 “08:00”捆姜,估涉及重復數(shù)據(jù)
3传趾、預測時刻中“23:00”以后,涉及日期整體加一天
4泥技、天氣氣象數(shù)據(jù)為圖片墨缘,需轉(zhuǎn)換為對應文字
3、問題對應實現(xiàn)偽代碼
  • 按時間分組獲取數(shù)據(jù)
values_list = []
        #定義不同的數(shù)據(jù) list 保存每列數(shù)據(jù)零抬,后續(xù)便于統(tǒng)一整合
        value1_list = []
        value2_list = []
        ......

for i,row_table in enumerate(day_html.find_all('div', attrs={'class': 'row'})):
            for j,column_table in enumerate(row_table.find_all('div')):
                    if j == 1:
                        value1_list.append(text)
                    elif j == 2:
                        value2_list.append(text)
                    ......

        values_list.append(value1_list)
        values_list.append(value2_list)
        ......
  • 重復數(shù)據(jù)判斷
        sql="select count(id) from Space0009A where column_0='%s' and column_1='%s' and column_2='%s' " %(publish_city,publish_time,f_sj)
        isRepeat = ms.ExecQuery(sql.encode('utf-8'))
        if isRepeat[0][0] == 0:
            sql = "insert into Space0009A values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s') " %(publish_city,publish_time,f_sj,f_tqxx,f_qw,f_js,f_fs,f_fx,f_qy,f_sd,f_yl,f_njd)
            ms.ExecNonQuery(sql.encode('utf-8'))
  • 預測時刻日期區(qū)分
days_html = soup.find_all('div', attrs={'class':'hour3'})

        flag_date = int(day_html["id"].replace('day',''))  #day0 镊讼、day1......
        forecast_date = datetime.datetime.strptime(publish_time,"%Y-%m-%d %H:%M").date() + datetime.timedelta(flag_date)  #獲取預測日期

        for i,row_table in enumerate(day_html.find_all('div', attrs={'class': 'row'})):
            is_new_day = False
            for j,column_table in enumerate(row_table.find_all('div')):
                    if i == 0:
                        if "日" in text:
                            text = str(forecast_date + datetime.timedelta(1)) +" "+ text.split('日')[1]
                            is_new_day = True
                        elif is_new_day:
                            text = str(forecast_date + datetime.timedelta(1)) + " " + text
                        else:
                            text = str(forecast_date) + " " + text
  • 天氣氣象轉(zhuǎn)換
def parse_html_forecast_code(html):
    soup = BeautifulSoup(html, "html.parser")
    #獲取建立圖標對應氣象字典,因字典變化較少平夜,抓取一次即可
    icon_list_soup = soup.find('div', attrs={'class': 'forecast'}).find_all('div',attrs={'class': 'day'})

    for icon in icon_list_soup:
        icon_key = icon.find('img')["src"].split("/")[-1]

        if (icon_key in icon_list) == False:
            icon_list[icon_key] = icon.find('div', attrs={'class': 'wdesc'}).getText().strip()

    print(icon_list)

總結(jié)

本輪示例主要實現(xiàn) 嵌套div 數(shù)據(jù)解析(目前嵌套list方案仍需改進)蝶棋,使用 in 關(guān)鍵字對 list 進行重復檢查,利用 enumerate 獲取循環(huán)下標等內(nèi)容忽妒,至此完成氣象預測數(shù)據(jù)抓取......

抓取日志示意

源碼:
MSSql_SqlHelp
spider_www.nmc.cn_city_Forecast

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玩裙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子段直,更是在濱河造成了極大的恐慌吃溅,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸯檬,死亡現(xiàn)場離奇詭異决侈,居然都是意外死亡,警方通過查閱死者的電腦和手機喧务,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進店門赖歌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人功茴,你說我怎么就攤上這事庐冯。” “怎么了坎穿?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵展父,是天一觀的道長返劲。 經(jīng)常有香客問我,道長栖茉,這世上最難降的妖魔是什么篮绿? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮衡载,結(jié)果婚禮上搔耕,老公的妹妹穿的比我還像新娘。我一直安慰自己痰娱,他們只是感情好弃榨,可當我...
    茶點故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著梨睁,像睡著了一般鲸睛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坡贺,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天官辈,我揣著相機與錄音,去河邊找鬼遍坟。 笑死拳亿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的愿伴。 我是一名探鬼主播肺魁,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼隔节!你這毒婦竟也來了鹅经?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤怎诫,失蹤者是張志新(化名)和其女友劉穎瘾晃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幻妓,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蹦误,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涌哲。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胖缤。...
    茶點故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖阀圾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狗唉,我是刑警寧澤初烘,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響肾筐,放射性物質(zhì)發(fā)生泄漏哆料。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一吗铐、第九天 我趴在偏房一處隱蔽的房頂上張望东亦。 院中可真熱鬧,春花似錦唬渗、人聲如沸典阵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壮啊。三九已至,卻和暖如春撑蒜,著一層夾襖步出監(jiān)牢的瞬間歹啼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工座菠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留狸眼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓浴滴,卻偏偏與公主長得像拓萌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子巡莹,可洞房花燭夜當晚...
    茶點故事閱讀 44,914評論 2 355

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