用Python查看哪個城市最熱

哪個城市最熱?

現(xiàn)如今瓢剿,我大天朝舉國上下都處于一種高溫的狀態(tài)逢慌。那么這里我們也來蹭一蹭熱度,來寫個小爬蟲间狂,看看全國哪個城市最熱攻泼。東西雖然小,但是比起那些所謂“高大上”的教程來說鉴象,這篇文章比較腳踏實地忙菠,不玩虛的,你看完后一定可以學會的纺弊。

準備工作:

  1. 在做爬蟲之前只搁,首先對爬蟲的解題路徑做個簡單概述。一個爬蟲工作分為兩步驟:

    • 第一步:把你需要爬取的那個網(wǎng)頁的數(shù)據(jù)全部拉下來俭尖。
    • 第二步是把從網(wǎng)站上拉下來的數(shù)據(jù)進行過濾氢惋,把你需要的提取出來,把不需要的給過濾掉稽犁。這就是爬蟲的工作原理焰望。
  2. 我們要爬取的網(wǎng)站數(shù)據(jù)不是特別大,復雜度也不高已亥。因此為降低大家學習爬蟲的難度熊赖。我們不上那些很復雜的框架,比如Scrapy虑椎,而是直接使用一個簡單又好用的第三方庫幫我們完成爬蟲任務震鹉,那就是requests庫俱笛。requests庫是一個專門用來從網(wǎng)站上拉取數(shù)據(jù)的庫,也就對應了我們爬蟲工作的第一步——從網(wǎng)站上拉取數(shù)據(jù)传趾。這個庫的使用迎膜,后面我們會講到,如果您還沒有安裝這個庫浆兰,那么可以通過以下命令進行安裝:pip install requests磕仅。如果您使用的是Linux或者Mac OS系統(tǒng),那么最好在前面加上一個sudo pip install requests簸呈,不然很容易會因為權限問題而安裝失敗榕订。

  3. 在使用requests庫把數(shù)據(jù)拉取下來以后,接下來的工作就是對這些數(shù)據(jù)進行分析和過濾了蜕便。這時候我們使用的一個第三方庫是beautifulsoup4劫恒。這個庫是專門用來解析網(wǎng)頁數(shù)據(jù)的。并且為了使接下效率更高轿腺,一般我們推薦使用lxml來作為解析的引擎兼贸。因此,要使用beautifulsoup庫吃溅,要通過以下命令來安裝:

    # 安裝lxml
    pip install lxml
    # 安裝beautifulsoup4
    pip install bs4
    

中國天氣網(wǎng)分析:

這里我們需要爬取的網(wǎng)站是:中國天氣網(wǎng)http://www.weather.com.cn/textFC/hb.shtml#溶诞。我們做任何爬蟲之前,都需要對這個網(wǎng)站進行詳細的分析决侈,一定要達到了如指掌的境地螺垢。不然后面很容易在數(shù)據(jù)過濾的時候會出現(xiàn)一個問題,這也是所有做爬蟲需要注意的地方赖歌。我們這里就跟大家分析一下中國天氣網(wǎng)的網(wǎng)站:

  1. 在以上這個中國天氣網(wǎng)的頁面中枉圃。我們可以看到,他是通過區(qū)域的方式把全國個大省份和城市進行區(qū)分的庐冯,有:華北孽亲、東北、華東展父、華中返劲、華南、西北栖茉、西南篮绿、港澳臺。在每個區(qū)域下面吕漂,都是通過表格的形式把屬于該區(qū)域下的所有省份以及城市的天氣信息列出來亲配。因此我們要做的是,首先找到所有的區(qū)域的鏈接,然后再在每個區(qū)域的鏈接下把這個區(qū)域下的所有的城市天氣信息爬出來就可以了吼虎。


    1.png
  2. 我們已經知道只要拿到了所有的區(qū)域鏈接犬钢,就可以在這個鏈接的網(wǎng)頁中把這些城市拿到。那么如何去拿到這個區(qū)域下對應的所有城市以及他們對應的天氣信息呢思灰?這時候就需要去解析源代碼了玷犹,我們點擊這個頁面任何一個地方,然后右鍵點擊審查元素官辈,打開控制臺后,去尋找規(guī)則(因為這個尋找規(guī)則比較繁瑣遍坟,這里就做個簡單概述拳亿,如果對如何去找到相應的元素感興趣,可以關注本公眾號愿伴,會有一套詳細的視頻教程免費教大家查找)肺魁。我們可以看到,一個省份的城市及其天氣信息隔节,都是放在一個叫做<div class='conMidtab2'>的盒子中鹅经。因此我們只要找到所有的conMidtab2盒子,就找到了所有的城市怎诫。但是這個地方需要注意的是瘾晃,因為在一個頁面中,展示了7天的數(shù)據(jù)幻妓,因此如果你按照class='conMidtab2'這個規(guī)則去尋找的話蹦误,會得到從今天往后延7天的所有數(shù)據(jù)。這時候我們就要換一個規(guī)則了肉津,我們經過分析(具體分析過程可以看本教程視頻內容)發(fā)現(xiàn)一天的天氣信息强胰,是放在一個class='conMidtab'的這樣一個盒子中。因此我們只要把第一個conMidtab盒子拿到妹沙,就可以拿到今天的天氣數(shù)據(jù)而把其他日期的數(shù)據(jù)給過濾掉偶洋。這里要給大家上一份源代碼了:

    # find方法,只會返回第一個滿足條件的元素距糖,也即只把第一個conMidtab返回回來玄窝,把今天的數(shù)據(jù)返回回來
    conMidtab = soup.find('div', class_='conMidtab')
    # 通過得到的這個conMidtab,我們再調用find_all方法悍引,把這個conMidtab元素下的所有conMidtab2盒子找到哆料,得到這一天中這個區(qū)域下所有的城市
    conMidtab2_list = conMidtab.find_all('div', class_='conMidtab2')
    

    也上一份圖片給大家分析一下:


    2.png
  3. 我們已經分析好了如何獲取城市的盒子,那么接下來就是去獲取城市的天氣信息了吗铐。我們繼續(xù)分析(具體分析過程可以看本視頻教程)后發(fā)現(xiàn)东亦,在table中,前面兩個tr是表頭,知識用來解釋數(shù)據(jù)的典阵,我們不需要奋渔,那么真正有用的數(shù)據(jù)是從第三個tr開始的。并且第三個tr的第1個td展示的是該省或者直轄市的名稱壮啊,從第二個td開始才是真正展示該省份下這個城市的詳細天氣情況了嫉鲸,這里上一張圖片分析一下:

    3.png

    并且,從第四個tr開始歹啼,下面的td全部展示的就是這個城市的信息了玄渗,而不包括省份的信息了,這里也用一張圖片來說明這個問題:

    4.png

    所以綜合以上的分析狸眼,我們就知道藤树,省份名稱是存儲在table下的第三個tr下的第0個td下,而城市名字則要進行判斷拓萌,如果是第三個tr岁钓,那么就是在第二個td,如果是從第四個開始微王,那么就是存儲在第0個td下屡限。而最高氣溫也要區(qū)分,第三個tr炕倘,存儲在第5個td下钧大,從第四個tr開始,則存儲在第4個td下罩旋,那么我們也可以上一份源代碼拓型,看看如何獲取的:

    conMidtab = soup.find('div', class_='conMidtab')
    conMidtab2_list = conMidtab.find_all('div', class_='conMidtab2')
    for x in conMidtab2_list:
        tr_list = x.find_all('tr')[2:]
        province = ''
        for index, tr in enumerate(tr_list):
            # 如果是第0個tr標簽,那么城市名和省份名是放在一起的
            min = 0
            if index == 0:
                td_list = tr.find_all('td')
                province = td_list[0].text.replace('\n', '')
                city = td_list[1].text.replace('\n', '')
                max = td_list[5].text.replace('\n', '')
            else:
                # 如果不是第0個tr標簽瘸恼,那么在這個tr標簽中只存放城市名
                td_list = tr.find_all('td')
                city = td_list[0].text.replace('\n', '')
                max = td_list[4].text.replace('\n', '')
    
            TEMPERATURE_LIST.append({
                'city': province+city,
                'min': min
            })
    

數(shù)據(jù)顯示:

如果把所有數(shù)據(jù)都爬下來后劣挫,那么我們可以使用echarts-python把數(shù)據(jù)進行可視化,這部分內容比較簡單东帅,我就直接把我做的可視化的數(shù)據(jù)圖給大家看下压固,具體的實現(xiàn)方式,大家可以觀看我的視頻教程靠闭,講解非常詳細:

5.jpg

寫在最后:

以上是對中國天氣網(wǎng)爬蟲和數(shù)據(jù)可視化的分析帐我,爬蟲雖然簡單,但也是五臟俱全愧膀,囊括了爬蟲邏輯的方方面面拦键,并且在最后還把爬取出來的數(shù)據(jù)進行了可視化,使我們爬取出來的數(shù)據(jù)有用武之地檩淋。另外芬为,如果想精通爬蟲技術萄金,建議學習下這個課程媚朦,相信你學習完后有很大的成長:21天搞定Python分布式爬蟲

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孙乖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌份氧,老刑警劉巖唯袄,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜗帜,死亡現(xiàn)場離奇詭異恋拷,居然都是意外死亡钮糖,警方通過查閱死者的電腦和手機梅掠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門酌住,熙熙樓的掌柜王于貴愁眉苦臉地迎上來店归,“玉大人酪我,你說我怎么就攤上這事《伎蓿” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵纱新,是天一觀的道長。 經常有香客問我脸爱,道長,這世上最難降的妖魔是什么簿废? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任络它,我火速辦了婚禮,結果婚禮上单料,老公的妹妹穿的比我還像新娘。我一直安慰自己看尼,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布躏结。 她就那樣靜靜地躺著狰域,像睡著了一般媳拴。 火紅的嫁衣襯著肌膚如雪兆览。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天抬探,我揣著相機與錄音,去河邊找鬼线梗。 笑死怠益,一個胖子當著我的面吹牛仪搔,可吹牛的內容都是我干的蜻牢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼煮嫌,長吁一口氣:“原來是場噩夢啊……” “哼抱虐!你這毒婦竟也來了?” 一聲冷哼從身側響起梯码,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤轩娶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳄抒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體椰弊,經...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡瓤鼻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年茬祷,在試婚紗的時候發(fā)現(xiàn)自己被綠了清焕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祭犯。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖粥惧,靈堂內的尸體忽然破棺而出最盅,到底是詐尸還是另有隱情,我是刑警寧澤涡贱,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站饵婆,受9級特大地震影響戏售,放射性物質發(fā)生泄漏草穆。R本人自食惡果不足惜灌灾,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一锋喜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘿般,春花似錦涯冠、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽砸逊。三九已至,卻和暖如春师逸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背对湃。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工遗淳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屈暗。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像种呐,于是被迫代替她去往敵國和親弃甥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內容