有时候漫画网站看到了一个挺好看的壁纸,就想着换成桌面壁纸,再过几天,又看到了另一个,还想再换,这样就很麻烦,虽说网上有很多程序,但还得下载,注册登录啥的,特别麻烦,今天就教大家用python简单实现这一效果.
- 选择你经常去的一个网站,比如 http://bizhi360.com/dongman
- 写爬虫程序,将图片保存下来
import requests
import time
from lxml import etree
import os
# 这个网站比较特殊,list_1没有,只能单独抓取
def req():
url = 'http://bizhi360.com/dongman/list_2.html'
headers = {"User-Agent": 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'}
tree = requests.get(url=url, headers=headers).text
s = etree.HTML(tree)
href = '//li/a/@href'
li = s.xpath(href)
for i in li:
i = 'http://bizhi360.com' + i
pic_html = requests.get(url=i,
headers={"User-Agent": 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'}).text
# 这样单独的图片链接就出来了,然后在循环提取图片
t = etree.HTML(pic_html)
time.sleep(2)
href = t.xpath('//figure/a/@href')[0]
print(href)
name=href.split('/')[-1]
pic_href = requests.get(url=href, headers=headers).content
with open('{}'.format(name), mode='wb') as f:
f.write(pic_href)
time.sleep(2)
print('第{}次完成了'.format(i))
return href
req()
当然你也可以对程序进行修改,将图片保存到你想保存的位置.
二、对桌面进行设置
1. 本次需要用到一个库 pywin32,需要自行安装一下
pip install pywin32
桌面设置一般在注册表的 这个位置 计算机\HKEY_CURRENT_USER\Control Panel\Desktop
第一个是你的桌面图片路径,设置值项“Wallpaperoriginx”的值等于水平偏移值,例如“100”。设置值项“Wallpaperoriginy”的值等于垂直偏移值,例如“300 ”,wallpaperstyle是你的图片设置风格,比如填充,居中,平铺.
2 表示拉伸壁纸
0 表示壁纸居中
6 表示适应
10 表示填充
我们需要操作注册表句柄进行修改.
t= win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, 'Control PanelDesktop', 0, win32con.KEY_SET_VALUE)
下面将刚刚爬虫获取到的图片记下来,然后使用win32api提交数据即可
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, img_path, win32con.SPIF_SENDWININICHANGE)
完整代码如下
import win32api # 调用Windows底层的接口
import win32con # 修改数据
import win32gui # 提交数据
import os # os文件操作
import random # 取随机值
import time
path = os.listdir(r'图片路径')
for i in path:
img_path = r'图片路径' + "\" + i
print(img_path)
# 打开注册表
t = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER, 'Control PanelDesktop', 0, win32con.KEY_SET_VALUE)
win32api.RegSetValueEx(t, "WallpaperStyle", 0, win32con.REG_SZ, '2')
win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, img_path, win32con.SPIF_SENDWININICHANGE)
time.sleep(10) #你想设置多少时间换一次壁纸