基於Python獲取城市近7天天氣預報
阿新 • • 發佈:2020-01-09
這篇文章主要介紹了基於Python獲取城市近7天天氣預報,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
首先,我們開啟中國天氣網,找到黃石市近7天天氣的網頁。
http://www.weather.com.cn/weather/101200601.shtml
然後按F12開始分析網頁結構,找到各個標籤,並分析它們的作用。h1:日期;p:天氣;tem-span:最高溫;tem-i:最低溫;win:風;em:風向;win-i:風力。
接下來,我們需要找到它的使用者代理,即User-agent。
分析的差不多了,我們就開始寫程式碼,下面是我寫的全部程式碼及執行結果:
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 '出現異常' #異常處理,防止出現錯誤 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'): #判斷標籤'p','tem'下是否有標籤'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) #風向,win1-win2 level = day.find('p','win').find('i').get_text() #風力 weather_list.append([date,wea,tem_l,tem_h,win2,level]) def print_wea(weather_list): s = ' \t' * 3 print(s.join(('日期','天氣','最低溫','最高溫','風向','風力'))) for i in weather_list: print(i[0],'\t',i[1],'\t\t\t',i[2],i[3],'\t\t',i[4],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天天氣預報") print_wea(wea_list) if __name__ == '__main__': main()
在格式輸出這方面,我的這份程式碼還存在著很大的缺陷,把它發出來,歡迎大家跟我一起討論,改進。