基于Python獲取城市近7天天氣預(yù)報(bào)
這篇文章主要介紹了基于Python獲取城市近7天天氣預(yù)報(bào),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
首先,我們打開中國(guó)天氣網(wǎng),找到黃石市近7天天氣的網(wǎng)頁。
http://www.weather.com.cn/weather/101200601.shtml
然后按F12開始分析網(wǎng)頁結(jié)構(gòu),找到各個(gè)標(biāo)簽,并分析它們的作用。h1:日期;p:天氣;tem-span:最高溫;tem-i:最低溫;win:風(fēng);em:風(fēng)向;win-i:風(fēng)力。
接下來,我們需要找到它的用戶代理,即User-agent。
分析的差不多了,我們就開始寫代碼,下面是我寫的全部代碼及運(yùn)行結(jié)果:
import re import requests from bs4 import BeautifulSoup def get_page(url): #獲取URL try: headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'} r = requests.get(url,headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return '出現(xiàn)異常' #異常處理,防止出現(xiàn)錯(cuò)誤 def parse_page(html, weather_list): soup = BeautifulSoup(html, 'html.parser') day_list = soup.find('ul', 't clearfix').find_all('li') for day in day_list: date = day.find('h1').get_text() wea = day.find('p', 'wea').get_text() if day.find('p', 'tem').find('span'): #判斷標(biāo)簽'p','tem'下是否有標(biāo)簽'span',以此判斷是否有最高溫 tem_h = day.find('p', 'tem').find('span').get_text() else: tem_h = '' #最高溫 tem_l = day.find('p', 'tem').find('i').get_text() #最低溫 win1 = re.findall('(?<= title=").*?(?=")', str(day.find('p','win').find('em'))) win2 = '-'.join(win1) #風(fēng)向,win1-win2 level = day.find('p', 'win').find('i').get_text() #風(fēng)力 weather_list.append([date, wea, tem_l, tem_h, win2, level]) def print_wea(weather_list): s = ' \t' * 3 print(s.join(('日期', '天氣', '最低溫', '最高溫', '風(fēng)向', '風(fēng)力'))) for i in weather_list: print(i[0], '\t',i[1],'\t\t\t',i[2],'\t\t\t',i[3],'\t\t',i[4],'\t\t',i[5]) #按格式輸出 def main(): url = 'http://www.weather.com.cn/weather/101200601.shtml' html = get_page(url) wea_list = [] parse_page(html, wea_list) print("\t\t\t\t\t\t\t\t\t黃石市近7天天氣預(yù)報(bào)") print_wea(wea_list) if __name__ == '__main__': main()
在格式輸出這方面,我的這份代碼還存在著很大的缺陷,把它發(fā)出來,歡迎大家跟我一起討論,改進(jìn)。
相關(guān)文章
python神經(jīng)網(wǎng)絡(luò)VGG16模型復(fù)現(xiàn)及其如何預(yù)測(cè)詳解
這篇文章主要為大家介紹了VGG16模型的復(fù)現(xiàn)及其詳解(包含如何預(yù)測(cè)),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python中threading模塊的Lock和RLock區(qū)別詳解
這篇文章主要介紹了Python中threading模塊的Lock和RLock區(qū)別詳解,Lock鎖是Python的原始鎖,在鎖定時(shí)不屬于任何一個(gè)線程,在調(diào)用了 lock.acquire() 方法后,進(jìn)入鎖定狀態(tài),lock.release()方法可以解鎖,底層是通過一個(gè)函數(shù)來實(shí)現(xiàn)的,需要的朋友可以參考下2023-09-09python實(shí)現(xiàn)打印類的所有屬性和方法
這篇文章主要介紹了python實(shí)現(xiàn)打印類的所有屬性和方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05Python3.7將普通圖片(png)轉(zhuǎn)換為SVG圖片格式(網(wǎng)站logo圖標(biāo))動(dòng)起來
這篇文章主要介紹了Python3.7將普通圖片(png)轉(zhuǎn)換為SVG圖片格式并且讓你的網(wǎng)站Logo(圖標(biāo))從此”動(dòng)”起來,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Python常見數(shù)字運(yùn)算操作實(shí)例小結(jié)
這篇文章主要介紹了Python常見數(shù)字運(yùn)算操作,結(jié)合實(shí)例形式總結(jié)分析了Python數(shù)字常見的四則運(yùn)算、整除、取余、開平方等相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-03-03全面了解Python的getattr(),setattr(),delattr(),hasattr()
下面小編就為大家?guī)硪黄媪私釶ython的getattr(),setattr(),delattr(),hasattr()。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06python?使用turtle實(shí)現(xiàn)實(shí)時(shí)鐘表并生成exe
這篇文章主要為大家詳細(xì)介紹了python使用Turtle庫(kù)繪制動(dòng)態(tài)鐘表,并有需要可以生成exe可執(zhí)行文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03解決django.db.utils.IntegrityError:(1048, Column las
這篇文章主要介紹了解決django.db.utils.IntegrityError:(1048, Column last_login cannot be null)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01