1. 程式人生 > 程式設計 >基於Python獲取城市近7天天氣預報

基於Python獲取城市近7天天氣預報

這篇文章主要介紹了基於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()

在格式輸出這方面,我的這份程式碼還存在著很大的缺陷,把它發出來,歡迎大家跟我一起討論,改進。