最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python爬取各省降水量及可視化詳解

 更新時(shí)間:2021年04月16日 15:07:20   作者:天Ye浪Sir  
本文是學(xué)習(xí)python,故選取了python最常用的爬蟲(chóng)作為實(shí)操訓(xùn)練同時(shí),還添加了可視化和GUI入門(mén)的內(nèi)容使爬取的內(nèi)容應(yīng)用更豐富,需要的朋友可以參考下

在具體數(shù)據(jù)的選取上,我爬取的是各省份降水量實(shí)時(shí)數(shù)據(jù)

話不多說(shuō),開(kāi)始實(shí)操

正文 

1.爬取數(shù)據(jù)

  • 使用python爬蟲(chóng),爬取中國(guó)天氣網(wǎng)各省份24時(shí)整點(diǎn)氣象數(shù)據(jù)
  • 由于降水量為動(dòng)態(tài)數(shù)據(jù),以js形式進(jìn)行存儲(chǔ),故采用selenium方法經(jīng)xpath爬取數(shù)據(jù)—ps:在進(jìn)行數(shù)據(jù)爬取時(shí),最初使用的方法是漂亮湯法(beautifulsoup)法,但當(dāng)輸出爬取的內(nèi)容(<class = split>時(shí),卻空空如也。在源代碼界面Ctrl+Shift+F搜索后也無(wú)法找到降水量,后查詢(xún)得知此為動(dòng)態(tài)數(shù)據(jù),無(wú)法用該方法進(jìn)行爬取
  • 使用循環(huán)和分類(lèi)的方式爬取省份不同、網(wǎng)址相似的降水量數(shù)據(jù),順帶記錄數(shù)據(jù)對(duì)應(yīng)的城市

f—string:

url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'

f-string 用大括號(hào) {} 表示被替換字段,其中直接填入替換內(nèi)容

將城市和降水量相對(duì)應(yīng)后存入字典再打印

代碼:

from lxml import etree
from selenium import webdriver
import re
city = [''for n in range(34)]   #存放城市列表
rain = [''for n in range(34)]   #存放有關(guān)降雨量信息的數(shù)值
rain_item = []
driver = webdriver.Chrome(executable_path='chromedriver')   #使用chrome瀏覽器打開(kāi)
for a in range(1,5):      #直轄市數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0100.shtml'  #網(wǎng)址
    driver.get(url_a)    #打開(kāi)網(wǎng)址
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
for a in range(5,10):      #一位數(shù)字網(wǎng)址數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0101.shtml'
    driver.get(url_a)
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text     #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
for a in range(10,35):      #二位數(shù)字網(wǎng)址數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'
    driver.get(url_a)
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
d = dict(zip(city,rain))  #將城市和降水量的列表合成為字典
for k,v in d.items():  #str轉(zhuǎn)float類(lèi)型
    rain_item.append(float(v))
print(d)

在對(duì)爬取的內(nèi)容進(jìn)行處理時(shí),可能會(huì)因?yàn)閿?shù)據(jù)的類(lèi)型而報(bào)錯(cuò),如爬下來(lái)的數(shù)據(jù)為str類(lèi)型,而排序需要數(shù)字類(lèi)型,故需要進(jìn)行float類(lèi)型轉(zhuǎn)化

使用該爬取方法,是模擬用戶(hù)打開(kāi)網(wǎng)頁(yè),并且會(huì)在電腦上進(jìn)行顯示。在爬取實(shí)驗(yàn)進(jìn)行中途,中國(guó)天氣網(wǎng)進(jìn)行了網(wǎng)址更新,原網(wǎng)址出現(xiàn)了部分城市數(shù)據(jù)無(wú)法顯示的問(wèn)題,但當(dāng)刷新界面后,數(shù)據(jù)可正常顯示,此時(shí)可采用模擬鼠標(biāo)點(diǎn)擊刷新的方法避免錯(cuò)誤。由于后續(xù)找到了新網(wǎng)址,故將這一方法省去。

2.數(shù)據(jù)可視化

  • 用Matplotlib庫(kù)函數(shù)繪制曲線,并輸出最大值及相應(yīng)城市、最小值及相應(yīng)城市、平均值和中位值
  • 數(shù)據(jù)的確定:medium分奇偶計(jì)算中位值所處排序后數(shù)據(jù)的位置(中位值);用sum求和后除于數(shù)據(jù)個(gè)數(shù)(平均值);max和min函數(shù)找到最值再由數(shù)值經(jīng)循環(huán)找到對(duì)應(yīng)的城市列表
  • 繪圖:使用plt函數(shù)繪制圖像,并注明橫縱坐標(biāo)、所需注釋
  • 文本處理:在進(jìn)行注釋時(shí),plt函數(shù)所要求的格式為str類(lèi)型,故需要進(jìn)行類(lèi)型轉(zhuǎn)換,同時(shí)添加適當(dāng)文字說(shuō)明

代碼:

#-*- codeing = utf-8 -*-
import matplotlib.pyplot as plt
from lxml import etree
from selenium import webdriver
import re
import matplotlib
matplotlib.rc("font",family='YouYuan')
city = [''for n in range(34)]   #存放城市列表
rain = [''for n in range(34)]   #存放有關(guān)降雨量信息的數(shù)值
driver = webdriver.Chrome(executable_path='chromedriver')   #使用chrome瀏覽器打開(kāi)
for a in range(1,5):      #直轄市數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0100.shtml'  #網(wǎng)址
    driver.get(url_a)    #打開(kāi)網(wǎng)址
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
for a in range(5,10):      #非直轄一位數(shù)字網(wǎng)址數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0101.shtml'
    driver.get(url_a)
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
for a in range(10,35):      #非直轄二位數(shù)字網(wǎng)址數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'
    driver.get(url_a)
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
if len(rain)%2 == 0:        #尋找中值
    medium = int(len(rain)/2)
else:
    medium = int(len(rain)/2)+1
medium_text = "中位值:" + rain[medium]
d = dict(zip(city,rain))  #將城市和降水量的列表合成為字典
rain_item = []
city_min = []
city_max = []
for k,v in d.items():
    rain_item.append(float(v))
average_rain = sum(rain_item)/len(rain_item)
average_text = "平均值:"+ str(average_rain)
max_rain = max(rain_item)  #最大值
min_rain = min(rain_item)  #最小值
for k,v in d.items():
    if float(v) == min_rain:
        city_min.append(k)
min_text = "降雨量最小的城市:"+str(city_min)+" 最小值:"+str(min_rain)
for k,v in d.items():
    if float(v) ==max_rain:
        city_max.append(k)
max_text = "降雨量最大的城市:"+str(city_max)+" 最大值:"+str(max_rain)
plt.bar(range(len(d)), rain_item, align='center')
plt.xticks(range(len(d)), list(d.keys()))
plt.xlabel('城市',fontsize=20)
plt.ylabel('降水量',fontsize=20)
plt.text(0,12,average_text,fontsize=6)
plt.text(0,13,medium_text,fontsize=6)
plt.text(0,14,max_text,fontsize=6)
plt.text(0,15,min_text,fontsize=6)
plt.show()

2.運(yùn)行界面

在這里插入圖片描述

3.互動(dòng)界面

使用tkinter庫(kù)進(jìn)行GUI的構(gòu)建使用button函數(shù)實(shí)現(xiàn)交互,調(diào)用編寫(xiě)的get函數(shù)獲取對(duì)用戶(hù)輸入的內(nèi)容進(jìn)行獲取并使用循環(huán)進(jìn)行遍歷處理,若城市輸入正確,則在界面上輸出當(dāng)?shù)氐慕邓看a:

#-*- codeing = utf-8 -*-
from lxml import etree
from selenium import webdriver
import re
import matplotlib
matplotlib.rc("font",family='YouYuan')
from tkinter import *
import tkinter as tk
city = [''for n in range(34)]   #存放城市列表
rain = [''for n in range(34)]   #存放有關(guān)降雨量信息的數(shù)值
driver = webdriver.Chrome(executable_path='chromedriver')   #使用chrome瀏覽器打開(kāi)
for a in range(1,5):      #直轄市數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0100.shtml'  #網(wǎng)址
    driver.get(url_a)    #打開(kāi)網(wǎng)址
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
for a in range(5,10):      #非直轄一位數(shù)字網(wǎng)址數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/1010{a}0101.shtml'
    driver.get(url_a)
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
for a in range(10,35):      #非直轄二位數(shù)字網(wǎng)址數(shù)據(jù)
    url_a= f'http://www.weather.com.cn/weather1dn/101{a}0101.shtml'
    driver.get(url_a)
    rain_list = []
    city_list = []
    resp_text = driver.page_source
    page_html = etree.HTML(resp_text)
    city_list = page_html.xpath('/html/body/div[4]/div[2]/a')[0]    #通過(guò)xpath爬取城市名稱(chēng)
    rain_list = page_html.xpath('//*[@id="weatherChart"]/div[2]/p[5]')[0]   #通過(guò)xpath爬取降雨量數(shù)據(jù)
    city[a-1] = city_list.text  #存入城市列表
    rain[a-1] = re.findall(r"\d+\.?\d*",rain_list.text)[0] #存入數(shù)值
d = dict(zip(city,rain))  #將城市和降水量的列表合成為字典
root=tk.Tk()
root.title('降水量查詢(xún)')
root.geometry('500x200')
def get():
    values = entry.get()
    for k,v in d.items():
        if k == values:
            label = Label(root, text= v+'mm')
            label.pack()
frame = Frame(root)
frame.pack()
u1 = tk.StringVar()
entry = tk.Entry(frame, width=20, textvariable=u1,  relief="sunken")
entry.pack(side="left")
frame1 = Frame(root)
frame1.pack()
btn1=Button(frame1, text="查詢(xún)", width=20, height=1, relief=GROOVE, command=lambda :get())
btn1.pack(side="left")
root.mainloop()

4.運(yùn)行界面

在這里插入圖片描述 

寫(xiě)在最后

在爬取天氣的過(guò)程中,僅發(fā)現(xiàn)中國(guó)天氣網(wǎng)有各省份降水量的數(shù)據(jù),可見(jiàn)我國(guó)在數(shù)據(jù)開(kāi)源方面還有很長(zhǎng)的路要走

到此這篇關(guān)于python爬取各省降水量及可視化詳解的文章就介紹到這了,更多相關(guān)python爬取請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • pandas取出重復(fù)數(shù)據(jù)的方法

    pandas取出重復(fù)數(shù)據(jù)的方法

    今天小編就為大家分享一篇pandas取出重復(fù)數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python中str.join()簡(jiǎn)單用法示例

    Python中str.join()簡(jiǎn)單用法示例

    這篇文章主要介紹了Python中str.join()簡(jiǎn)單用法,結(jié)合實(shí)例形式分析了Python中str.join()用于連接生成新字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2018-03-03
  • Python中SOAP項(xiàng)目的介紹及其在web開(kāi)發(fā)中的應(yīng)用

    Python中SOAP項(xiàng)目的介紹及其在web開(kāi)發(fā)中的應(yīng)用

    這篇文章主要介紹了Python中的SOAP項(xiàng)目及其在web開(kāi)發(fā)中的應(yīng)用,本文來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python如何使用ConfigParser讀取配置文件

    Python如何使用ConfigParser讀取配置文件

    這篇文章主要介紹了Python如何使用ConfigParser讀取配置文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • python高級(jí)特性和高階函數(shù)及使用詳解

    python高級(jí)特性和高階函數(shù)及使用詳解

    Python很棒,它有很多高級(jí)用法值得細(xì)細(xì)思索,學(xué)習(xí)使用。這篇文章主要介紹了python高級(jí)特性和高階函數(shù)及使用詳解,需要的朋友可以參考下
    2018-10-10
  • Linux永久修改pip配置源的詳細(xì)過(guò)程

    Linux永久修改pip配置源的詳細(xì)過(guò)程

    默認(rèn)情況下pip使用的是國(guó)外的鏡像,在下載的時(shí)候速度非常慢,所以需要更換PIP的鏡像源,下面這篇文章主要給大家介紹了關(guān)于Linux永久修改pip配置源的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • 一文搞懂python異常處理、模塊與包

    一文搞懂python異常處理、模塊與包

    異常就是系統(tǒng)中的錯(cuò)誤,程序是無(wú)法改變和處理的,文中有給大家提到異常處理機(jī)制,模塊與包的相關(guān)知識(shí),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-06-06
  • Python?獲取指定開(kāi)頭指定結(jié)尾所夾中間內(nèi)容(推薦)

    Python?獲取指定開(kāi)頭指定結(jié)尾所夾中間內(nèi)容(推薦)

    獲取文章中指定開(kāi)頭、指定結(jié)尾中所夾的內(nèi)容。其中,開(kāi)頭和結(jié)尾均有多種,但最多也就十幾種,所以代碼還是具有可行性的,今天小編給大家介紹通過(guò)Python?獲取指定開(kāi)頭指定結(jié)尾所夾中間內(nèi)容,感興趣的朋友一起看看吧
    2023-02-02
  • 使用Python生成跑馬燈視頻的完整代碼

    使用Python生成跑馬燈視頻的完整代碼

    這篇文章主要介紹了如何使用Python生成跑馬燈視頻,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-11-11
  • python編程-將Python程序轉(zhuǎn)化為可執(zhí)行程序[整理]

    python編程-將Python程序轉(zhuǎn)化為可執(zhí)行程序[整理]

    python編程-將Python程序轉(zhuǎn)化為可執(zhí)行程序[整理]...
    2007-04-04

最新評(píng)論

洱源县| 泸定县| 龙山县| 沈阳市| 平罗县| 广灵县| 嘉祥县| 扶风县| 伊吾县| 潞城市| 扎鲁特旗| 双峰县| 清镇市| 江川县| 吐鲁番市| 安福县| 平远县| 吴川市| 双峰县| 无棣县| 莒南县| 宿松县| 沅陵县| 弋阳县| 余庆县| 宜都市| 涟源市| 来安县| 明光市| 南宫市| 康乐县| 金沙县| 渑池县| 德惠市| 台东市| 古蔺县| 上高县| 大庆市| 九龙城区| 延津县| 隆尧县|