虽然网上关于这个的教程不少,但是写在这里,就当作自己的学习记录吧。
开发工具:Python 3.7
环境:win10
图像来源:日本himawari-8气象卫星官网
思路:利用爬虫从官网抓取图像,然后设置为电脑壁纸,十分钟更新一次。
首先,打开官网分析一波,抓包
可以找出图片的地址链接
分析一下链接的构成规律可知,从D531106/1d/550/后面开始,都是对应的时间日期,使用的是格林威治标准时间,与北京时间相差8小时。
知道了图片的链接,剩下就可以直接爬取了,代码如下:
from datetime import datetime,timedelta
import requestsdef imgDown():urlBase="https://himawari8-dl.nict.go.jp/himawari8/img/D531106/1d/550/"today=str((datetime.utcnow()-timedelta(minutes=60)).strftime("%Y/%m/%d/"))hour=str((datetime.utcnow()-timedelta(minutes=60)).strftime("%H").zfill(2))second=str((datetime.utcnow()-timedelta(minutes=60)).strftime("%M")[0]+"0")minute="00"urlEnd="_0_0.png"url=urlBase+today+hour+second+minute+urlEndimg=requests.get(url)print(url)with open("earth.png","wb") as file:file.write(img.content)
由于在爬取的时候,使用最新时间,爬到的是No Image,所以我减去了一个小时,避免爬取到错误图片,爬取结果如下。
获取了图像,接下来就是设置为电脑桌面了。
调用pywin32模块,这里imgpath应该为图片的绝对路径,如果没有win32模块需要单独安装。
def setWallpper(imgpath):keyex = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)win32api.RegSetValueEx(keyex, "WallpaperStyle", 0, win32con.REG_SZ, "0")win32api.RegSetValueEx(keyex, "TileWallpaper", 0, win32con.REG_SZ, "0")win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, imgpath, win32con.SPIF_SENDWININICHANGE)
效果图:
完整代码:
from datetime import datetime,timedelta
import requests
import os
import win32api,win32con,win32guidef imgDown():urlBase="https://himawari8-dl.nict.go.jp/himawari8/img/D531106/1d/550/"today=str((datetime.utcnow()-timedelta(minutes=60)).strftime("%Y/%m/%d/"))hour=str((datetime.utcnow()-timedelta(minutes=60)).strftime("%H").zfill(2))second=str((datetime.utcnow()-timedelta(minutes=60)).strftime("%M")[0]+"0")minute="00"urlEnd="_0_0.png"url=urlBase+today+hour+second+minute+urlEndimg=requests.get(url)print(url)with open("earth.png","wb") as file:file.write(img.content)def setWallpper(imagepath):keyex = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, "Control Panel\\Desktop", 0, win32con.KEY_SET_VALUE)win32api.RegSetValueEx(keyex, "WallpaperStyle", 0, win32con.REG_SZ, "0")win32api.RegSetValueEx(keyex, "TileWallpaper", 0, win32con.REG_SZ, "0")win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, imagepath, win32con.SPIF_SENDWININICHANGE)if __name__=='__main__':imgDown()path=os.getcwd()print(path)setWallpper(path+"\\earth.png")
自此,从爬取图像到设置壁纸,都完成了,接下来就是设置定时爬取的问题了。
可以使用windows的定时任务
也可以while循环+sleep, 设置10分钟爬取一次。官网十分钟更新一次图像,所以爬多了没意义。