主頁 > 知識庫 > Python實(shí)現(xiàn)天氣查詢軟件

Python實(shí)現(xiàn)天氣查詢軟件

熱門標(biāo)簽:騰訊地圖標(biāo)注沒法顯示 商家地圖標(biāo)注海報 地圖標(biāo)注自己和別人標(biāo)注區(qū)別 ai電銷機(jī)器人的優(yōu)勢 海外網(wǎng)吧地圖標(biāo)注注冊 孝感營銷電話機(jī)器人效果怎么樣 打電話機(jī)器人營銷 聊城語音外呼系統(tǒng) 南陽打電話機(jī)器人

一、背景

某天下班淋雨成了落湯雞,發(fā)了個朋友圈感慨一下啊,然后......

夜深人靜之時,突然收到了來自學(xué)妹的Py文件,運(yùn)行之后發(fā)現(xiàn)事情并不簡單(如下圖):

這是暗示我...下次出門給她帶把傘?不管那么多,作為一個程序猿,遇到程序先拆解一下。

二、工具

爬蟲:requests

解析:re

UI:tkinter

三、代碼解讀

想要做一個獲取天氣預(yù)報的小程序,第一步要做的就是能夠進(jìn)行天氣預(yù)報的爬取,這里通過城市名稱匹配百度天氣的URL進(jìn)行爬取,并通過正則的方式進(jìn)行解析,最終以字典的形式返回結(jié)果。

class Weather(object):
    def __init__(self):
        pass
 
    def crawl(self, key):
 
        url = 'http://weathernew.pae.baidu.com/weathernew/pc?query=' + key + '天氣srcid=4982city_name=' + key + 'province_name=' + key
 
        # 設(shè)置請求頭
        headers = {
            'user-agent':
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
            'Referer': 'https://googleads.g.doubleclick.net/'
        }
        # 頁面HTML
        res = requests.get(url, headers=headers).text
        # 時間
        time = re.search(r'\{\"update_time\":\"(.+?)\"', res).group(1)
        # 天氣
        weather = re.search(r'\"weather\"\:\"(.+?)\"', res).group(1)
        weather = weather.encode('utf-8').decode("unicode-escape")
        # 氣溫
        weather_l = re.search(r'temperature_night\"\:\"(.+?)\"', res).group(1)
        weather_h = re.search(r'temperature_day\"\:\"(.+?)\"', res).group(1)
        # 風(fēng)力
        wind_now = re.search(r'\"wind_power_day\"\:\"(.+?)\"', res).group(1)
        wind_now = wind_now.encode('utf-8').decode("unicode-escape")
        wind_name = re.search(r'\"wind_direction_day\"\:\"(.+?)\"',
                              res).group(1)
        wind_name = wind_name.encode('utf-8').decode("unicode-escape")
        wind = wind_name + wind_now
        # 貼示
        desc = re.search(r'\"desc\"\:\"(.+?)\"', res).group(1)
        desc = desc.encode('utf-8').decode("unicode-escape")
 
        # 結(jié)果生
        dic = {
            '城市': key,
            '更新時間': time,
            '天氣': weather,
            '溫度': weather_l + '-' + weather_h + '攝氏度',
            '風(fēng)力': wind,
            '貼示': desc,
        }
        return dic

寫好了爬取天氣預(yù)報的代碼之后,下面就可以寫一個UI來和輸入/爬取的內(nèi)容進(jìn)行交互的,寫UI的方式大同小異,代碼如下:

class Weather_UI(object):
    def __init__(self):
        self.window = Tk()
        self.weather = Weather()
 
        self.window.title(u'天氣預(yù)報')
        # 設(shè)置窗口大小和位置
        self.window.geometry('310x370')
        # 創(chuàng)建一個文本框
        self.result_text0 = Label(self.window, text=u'學(xué)長所在城市:\n要寫中文呦')
        self.result_text0.place(x=10, y=5, height=130)
        self.result_text0.bind('提示')
 
        self.result_text1 = Text(self.window, background='#ccc')
        self.result_text1.place(x=140, y=10, width=155, height=155)
        self.result_text1.bind("Key-Return>", self.submit)
 
        # 創(chuàng)建一個按鈕
        # 為按鈕添加事件
        self.submit_btn = Button(self.window,
                                 text=u'獲取天氣',
                                 command=self.submit)
        self.submit_btn.place(x=170, y=165, width=70, height=25)
        self.submit_btn2 = Button(self.window, text=u'清空', command=self.clean)
        self.submit_btn2.place(x=250, y=165, width=35, height=25)
 
        # 標(biāo)題
        self.title_label = Label(self.window, text=u'今日天氣:')
        self.title_label.place(x=10, y=165)
 
        # 結(jié)果
        self.result_text = Text(self.window, background='#ccc')
        self.result_text.place(x=10, y=190, width=285, height=165)
 
    def submit(self):
        # 從輸入框獲取用戶輸入的值
        content = self.result_text1.get(0.0, END).strip().replace("\n", " ")
 
        # 把城市信息傳到爬蟲函數(shù)中
        result = self.weather.crawl(content)
 
        # 將結(jié)果顯示在窗口中的文本框中
        for k, v in result.items():
            self.result_text.insert(END, k + ':' + v)
            self.result_text.insert(END, '\n')
            self.result_text.insert(END, '\n')
 
    # 清空文本域中的內(nèi)容
    def clean(self):
        self.result_text1.delete(0.0, END)
        self.result_text.delete(0.0, END)
 
    def run(self):
        self.window.mainloop()

運(yùn)行結(jié)果如下:

四、完整代碼

import json
import requests
import re
import tkinter as Tk
from tkinter import Tk, Button, Entry, Label, Text, END
 
 
class Weather(object):
    def __init__(self):
        pass
 
    def crawl(self, key):
 
        url = 'http://weathernew.pae.baidu.com/weathernew/pc?query=' + key + '天氣srcid=4982city_name=' + key + 'province_name=' + key
 
        # 設(shè)置請求頭
        headers = {
            'user-agent':
            'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
            'Referer': 'https://googleads.g.doubleclick.net/'
        }
        # 頁面HTML
        res = requests.get(url, headers=headers).text
        # 時間
        time = re.search(r'\{\"update_time\":\"(.+?)\"', res).group(1)
        # 天氣
        weather = re.search(r'\"weather\"\:\"(.+?)\"', res).group(1)
        weather = weather.encode('utf-8').decode("unicode-escape")
        # 氣溫
        weather_l = re.search(r'temperature_night\"\:\"(.+?)\"', res).group(1)
        weather_h = re.search(r'temperature_day\"\:\"(.+?)\"', res).group(1)
        # 風(fēng)力
        wind_now = re.search(r'\"wind_power_day\"\:\"(.+?)\"', res).group(1)
        wind_now = wind_now.encode('utf-8').decode("unicode-escape")
        wind_name = re.search(r'\"wind_direction_day\"\:\"(.+?)\"',
                              res).group(1)
        wind_name = wind_name.encode('utf-8').decode("unicode-escape")
        wind = wind_name + wind_now
        # 貼示
        desc = re.search(r'\"desc\"\:\"(.+?)\"', res).group(1)
        desc = desc.encode('utf-8').decode("unicode-escape")
 
        # 結(jié)果生
        dic = {
            '城市': key,
            '更新時間': time,
            '天氣': weather,
            '溫度': weather_l + '-' + weather_h + '攝氏度',
            '風(fēng)力': wind,
            '貼示': desc,
        }
        return dic
 
 
class Weather_UI(object):
    def __init__(self):
        self.window = Tk()
        self.weather = Weather()
 
        self.window.title(u'天氣預(yù)報')
        # 設(shè)置窗口大小和位置
        self.window.geometry('310x370')
        # 創(chuàng)建一個文本框
        self.result_text0 = Label(self.window, text=u'學(xué)長所在城市:\n要寫中文呦')
        self.result_text0.place(x=10, y=5, height=130)
        self.result_text0.bind('提示')
 
        self.result_text1 = Text(self.window, background='#ccc')
        self.result_text1.place(x=140, y=10, width=155, height=155)
        self.result_text1.bind("Key-Return>", self.submit)
 
        # 創(chuàng)建一個按鈕
        # 為按鈕添加事件
        self.submit_btn = Button(self.window,
                                 text=u'獲取天氣',
                                 command=self.submit)
        self.submit_btn.place(x=170, y=165, width=70, height=25)
        self.submit_btn2 = Button(self.window, text=u'清空', command=self.clean)
        self.submit_btn2.place(x=250, y=165, width=35, height=25)
 
        # 標(biāo)題
        self.title_label = Label(self.window, text=u'今日天氣:')
        self.title_label.place(x=10, y=165)
 
        # 結(jié)果
        self.result_text = Text(self.window, background='#ccc')
        self.result_text.place(x=10, y=190, width=285, height=165)
 
    def submit(self):
        # 從輸入框獲取用戶輸入的值
        content = self.result_text1.get(0.0, END).strip().replace("\n", " ")
 
        # 把城市信息傳到爬蟲函數(shù)中
        result = self.weather.crawl(content)
 
        # 將結(jié)果顯示在窗口中的文本框中
        for k, v in result.items():
            self.result_text.insert(END, k + ':' + v)
            self.result_text.insert(END, '\n')
            self.result_text.insert(END, '\n')
 
    # 清空文本域中的內(nèi)容
    def clean(self):
        self.result_text1.delete(0.0, END)
        self.result_text.delete(0.0, END)
 
    def run(self):
        self.window.mainloop()
 
 
A = Weather_UI()
A.run()

到此這篇關(guān)于Python實(shí)現(xiàn)天氣查詢系統(tǒng)的文章就介紹到這了,更多相關(guān)Python天氣查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python腳本制作天氣查詢實(shí)例代碼
  • python趣味挑戰(zhàn)之爬取天氣與微博熱搜并自動發(fā)給微信好友
  • python制作的天氣預(yù)報小工具(gui界面)
  • Python爬蟲之獲取心知天氣API實(shí)時天氣數(shù)據(jù)并彈窗提醒
  • Python天氣語音播報小助手

標(biāo)簽:揚(yáng)州 迪慶 六盤水 牡丹江 聊城 楊凌 南寧 撫州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python實(shí)現(xiàn)天氣查詢軟件》,本文關(guān)鍵詞  Python,實(shí)現(xiàn),天氣查詢,軟件,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python實(shí)現(xiàn)天氣查詢軟件》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python實(shí)現(xiàn)天氣查詢軟件的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章