1.说干就干,首先是爬取必应的每日图片,代码如下:
import urllib import requests import re import time def get_image(): url = 'http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1&nc=1361089515117&FORM=HYLH1' time = time.strftime("%Y.%m.%d") content = urllib.urlopen(url).read().decode('utf-8') reg = re.compile('"url":"(.*?)","urlbase"', re.S) text = re.findall(reg, content) img_url = 'http://cn.bing.com' + text[0] image = requests.get(img_url).content file_name = 'C:\Users\xxxx\Desktop\screen\%s.bmp'%local f = open(file_name, 'wb') f.write(image) f.close() return file_name该函数实现了爬取每日必应图片的功能,然后将图片保存在本地桌面的screen文件夹内,命名格式是当天的年.月.日.bmp,最后将该文件名返回,这个主要是为了下一步设置壁纸用的。需要使用本代码的朋友可以把file_name改成你想保存的位置就行。
2.然后接下来是更换壁纸功能,代码如下:
import win32api,win32con,win32gui def setWallPaper(pic_path): key = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE) win32api.RegSetValueEx(key, "WallpaperStyle", 0, win32con.REG_SZ, "2") win32api.RegSetValueEx(key, "TileWallpaper", 0, win32con.REG_SZ, "0") win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, pic_path, win32con.SPIF_SENDWININICHANGE)
其中,RegOpenKeyEx用于打开指定的注册表键
RegOpenKeyEx( HKEY hKey, // 要打开的键值句柄 LPCTSTR lpSubKey, // 要打开的子键名 DWORD ulOptions, // 保留位置0 REGSAM samDesired, // 一个访问掩码,它指定对密钥的期望访问权限。 PHKEY phkResult //指向变量的指针,该变量接收打开的键的句柄。 );
RegSetValueEx函数在注册表项下设置指定值的数据和类型。
LONG RegSetValueEx( HKEY hKey, // 要设定的键值句柄 LPCTSTR lpValueName, // 要设定的键值名称 DWORD Reserved, // 保留位置0 DWORD dwType, //要设定的键值类型,REG_SZ为普通文本类型 CONST BYTE *lpData, // 要设定的键值数据 DWORD cbData // 要设定的键值数据大小 );WallpaperStyle是设置用于填充壁纸周围剩余空间的Active Desktop样式,共有三个可以定义的值:0=居中、1=平铺、2=拉伸。 TileWallpaper是设置壁纸的显示方式,共有三个可以定义的值:0=居中、1=平铺、2=拉伸。 实际上,WallpaperStyle和TileWallpaper的键值不需要更换,维持原值即可,如可以把WallpaperStyle的值保持为“2”,TileWallpaper的值保持为“0”。 SystemParametersInfo为设置系统级参数,可以获取和设置数量众多的windows系统参数。这一步将桌面壁纸更换为本地图片,然后通知系统应用该更改。
3.最后是主程序,也就是将两个函数进行组合,代码如下:
if __name__=='__main__': file_name= get_image () setWallPaper(file_name)上述代码已经可以完成我们想要的效果,但是每次都需要自己手动修改,这肯定是难以忍受的,所以接下来进行window定时任务的设置 1.右键我的电脑,选择管理
2.任务计划程序,创建任务
3.常规界面
4.触发器界面,新建,然后设置如下,点击确认
5.操作界面,点击新建,设置如下,点击确认
解释一下为什么用pythonw.exe而不是python.exe,因为测试时发现python.exe启动时会弹出黑框,执行完毕后自动关闭,而我们只想让其在后台工作,而不是弹出碍眼的黑框,所以利用pythonw.exe。 6.条件界面,将所有的勾都取消 7.设置界面,勾选如果过了计划开始时间,立即启动任务 8.点击确定,然后可以从活动任务中找到刚才我们设置的任务
9.双击之后,会出现下图框
10.点击运行,看看壁纸是否更换 本文实现了一个win10下的自定义美化功能,每日10点定时爬取必应每日图片,然后将其设置为桌面壁纸。涉及到了python网络爬虫知识、re正则知识、win32api知识、windows定时任务知识等。