python下載衛(wèi)星云圖合成gif的方法示例
Python下載中央氣象臺衛(wèi)星云圖后保存為gif并播放,大致步驟:
- 獲取URL
- 下載圖片
- 合成GIF
- 播放GIF
1.獲取URL
1.1 先下載一份網(wǎng)頁源碼看看網(wǎng)頁結(jié)構(gòu)
保存為:response.txt
#http庫 import requests #準(zhǔn)備http請求頭 headers = {"user-agent": "firefox"} #中央氣象臺衛(wèi)星云圖網(wǎng)頁 url = 'http://www.nmc.cn/publish/satellite/fy2.htm' #獲取網(wǎng)頁 r = requests.get(url, headers=headers) #改編碼方式支持中文 r.encoding='utf-8' #保存為文本 with open('response.txt','w', encoding='utf-8') as f: f.write(r.text)
1.2 到網(wǎng)頁查看圖片鏈接
右鍵圖片---查看元素
圖片鏈接如下:可以看到圖片鏈接的域名和網(wǎng)頁域名不同。
1.3 在網(wǎng)頁碼源response.txt中搜索圖片名稱
發(fā)現(xiàn)有一處列出了動畫的12張圖片:可以看到12張圖片的鏈接都在script字段中。
1.4 過濾出script,找到所有url
使用html解析庫解析出script,script的開頭type="text/javascript"作為過濾條件,結(jié)果打印看看:
#html/xml解析庫 from lxml import etree #解析response html = etree.HTML(r.text) result = html.xpath('//script[@type="text/javascript"]/text()')[2] print(result)
打印結(jié)果如下,可以看到是多行字符串。
根據(jù)圖片的鏈接規(guī)律,可以用正則匹配出來:
#正則庫 import re urls = re.findall('/product.*.JPG', result) print(urls)
成功匹配出圖片url。注意這里的url只有后半部分,根據(jù)之前的圖片鏈接可知,實(shí)際圖片url還需加上:http://image.mnc.cn。
1.5 因此寫獲取圖片URL函數(shù)
def getpage(page): try: r = requests.get(page, headers=headers) html = etree.HTML(r.text) result = html.xpath('//script[@type="text/javascript"]/text()')[2] urls = re.findall('/product.*.JPG', result) return urls except Exception as e: print(e)
2.下載圖片
拿到圖片url的列表后,就是下載圖片:
#url前綴 base_url = 'http://image.nmc.cn' def dlpic(urls): # 定義一個(gè)文件名稱收集列表 filenames = [] for item in urls: r = requests.get(base_url + item, headers) #文件名就是用斜杠把字符串分隔,取走后后一個(gè)字符串 filename = item.split('/')[-1] filenames.append(filename) #保存圖片 with open('wxyt_pic\\' + filename, 'wb') as f: f.write(r.content) print('已下載:'+item) #返回文件名稱列表,用于合成gif return filenames
3.合成圖片
# 圖片操作庫 import imageio def makegif(images): # 創(chuàng)建空列表,把圖片明反序 frames = [] images.reverse() # 加載12張圖片 for item in images: frames.append(imageio.imread('wxyt_pic\\'+item)) # 合成1張gif imageio.mimsave('hecheng.gif', frames, 'GIF', duration=1)
4.播放圖片
def playgif(seq=0): if set == 0: #播放12張合成好的gif animation = pyglet.resource.animation('hecheng.gif') else: pyglet.resource.path = ['wxyt_pic'] la = os.listdir('wxyt_pic') images = [] for n in la: images.append(pyglet.resource.image(n)) #播放庫存中的所有照片 animation = pyglet.image.Animation.from_image_sequence(images, period=0.5, loop=True) #顯示動畫 sprite = pyglet.sprite.Sprite(animation) windows = pyglet.window.Window(width=sprite.width, height=sprite.height) @windows.event def on_draw(): windows.clear() sprite.draw() pyglet.app.run()
5.整體代碼
import requests from lxml import etree import imageio import re import pyglet import os # 在腳本同目錄下,新建一個(gè)文件夾,存儲當(dāng)天12張圖 def ckdir(): if os.path.exists('wxyt_pic') == False: os.mkdir('wxyt_pic') # 獲取圖片url列表 def getpage(page): try: r = requests.get(page, headers=headers) html = etree.HTML(r.text) result = html.xpath('//script[@type="text/javascript"]/text()')[2] urls = re.findall('/product.*.JPG', result) return urls except Exception as e: print(e) # 下載圖片 def dlpic(urls): filenames = [] for item in urls: r = requests.get(base_url + item, headers) filename = item.split('/')[-1] filenames.append(filename) with open('wxyt_pic\\' + filename, 'wb') as f: f.write(r.content) print('已下載:'+item) return filenames # 制作gif def makegif(images): frames = [] images.reverse() for item in images: frames.append(imageio.imread('wxyt_pic\\'+item)) imageio.mimsave('hecheng.gif', frames, 'GIF', duration=1) # 播放gif def playgif(seq=0): if set == 0: #播放12張合成好的gif animation = pyglet.resource.animation('hecheng.gif') else: pyglet.resource.path = ['wxyt_pic'] la = os.listdir('wxyt_pic') images = [] for n in la: images.append(pyglet.resource.image(n)) #播放庫存中的所有照片 animation = pyglet.image.Animation.from_image_sequence(images, period=0.5, loop=True) #顯示動畫 sprite = pyglet.sprite.Sprite(animation) windows = pyglet.window.Window(width=sprite.width, height=sprite.height) @windows.event def on_draw(): windows.clear() sprite.draw() pyglet.app.run() # init if __name__ == '__main__': base_url = 'http://image.nmc.cn' page = 'http://www.nmc.cn/publish/satellite/fy2.htm' headers = {"user-agent": "firefox"} ckdir() urls = getpage(page) images = dlpic(urls) makegif(images) # 0只播放今天12張,1播放庫存里所有照片 playgif(1)
6.最終效果
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python如何獲取當(dāng)前路徑并列出當(dāng)前路徑下的所有文件
這篇文章主要介紹了Python如何獲取當(dāng)前路徑并列出當(dāng)前路徑下的所有文件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Python使用keras和tensorflow遇到的問題及解決
這篇文章主要介紹了Python使用keras和tensorflow遇到的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03python寫一個(gè)隨機(jī)點(diǎn)名軟件的實(shí)例
今天小編就為大家分享一篇python寫一個(gè)隨機(jī)點(diǎn)名軟件的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11十一個(gè)案例帶你吃透Python函數(shù)參數(shù)
這篇文章主要通過十一個(gè)案例帶大家一起了解一下Python中的函數(shù)參數(shù),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-08-08selenium3.0+python之環(huán)境搭建的方法步驟
這篇文章主要介紹了selenium3.0+python之環(huán)境搭建的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02Python使用設(shè)計(jì)模式中的責(zé)任鏈模式與迭代器模式的示例
這篇文章主要介紹了Python使用設(shè)計(jì)模式中的責(zé)任鏈模式與迭代器模式的示例,責(zé)任鏈模式與迭代器模式都可以被看作為行為型的設(shè)計(jì)模式,需要的朋友可以參考下2016-03-03