众所周知,一个良好的桌面壁纸能提高写代码的心情,也能加强在电脑面前吃泡面的食欲 但是找到一个合适壁纸是多么麻烦是事情,所以很多小伙伴不想麻烦,于是我的想法诞生了
先看效果图
只需要双击图标就可以切换下一张图片
还可以定时自动更换壁纸(后面详细介绍)
执行逻辑:
1.先去寻找高清壁纸网站
2.编写爬虫将大量图片保存到本地
3.编写代码将图片设置为壁纸
4.增加定时更新模块
一、目标地址
https://pic.netbian.com
二、爬虫代码
'''
目标网站: https://pic.netbian.com
'''
from requests_html import HTMLSession
import re,os
import requests
from tqdm import tqdm
from functools import partial
from multiprocessing import Pool
session = HTMLSession()
# 获取下载链接
def get_urllist(addr):
'''
:addr: 传入该网站一个地址
:return: 返回一个高清大图下载地址字典(标题:url)
'''
addr = f'https://pic.netbian.com{addr}'
r = session.get(addr)
# // 查看页面内容
# print(r.html.html)
# 获取链接
# print(r.html.links) # 所有链接
url_list = r.html.absolute_links # 绝对链接
# print(url_list)
rule = re.compile('(https://pic.netbian.com/tupian/[0-9]{1,9}.html)')
href_list = re.findall(rule,str(url_list))
# print(href_list)
# print('获取图片:',len(href_list))
# 请求进去得到高清壁纸
complete_url_dict = {}
for i in href_list:
response = session.get(i)
# print(response.html.html)
# 获取部分url
imperfect_url = response.html.xpath("//a[@id='img']/img/@src",first=True)
title = response.html.xpath("//a[@id='img']/img/@title",first=True)
# 拼接完整url
url = f'https://pic.netbian.com{imperfect_url}'
complete_url_dict.update({url:title})
return complete_url_dict
# 下载图片
def download(url_dict,save_path):
'''
:save_path: 保存目录
:param url_dict: 图片下载地址列表
:return:
'''
# print(url_dict)
name_list = os.listdir(save_path)
# print(name_list)
# for url,title in tqdm(url_dict.items()):
url = url_dict[0]
title = url_dict[1]
if f'{title}.jpg' in name_list:
print(title,'已存在...跳过!')
pass
else:
with open(f'{save_path}/{title}.jpg', mode='wb') as f:
f.write(requests.get(url).content)
# print(title,':写入成功!')
if __name__ == '__main__':
# 根据网站创建图片分类
dic = {
'4k风景':'/4kfengjing/',
'4k美女':'/4kmeinv/',
'4k游戏': '/4kyouxi/',
'4k动漫': '/4kdongman/',
'4k影视': '/4kyingshi/',
'4k汽车': '/4kqiche/',
'4k动物': '/4kdongwu/',
'4k人物': '/4krenwu/',
'4k美食': '/4kmeishi/',
'4k宗教': '/4kzongjiao/',
'4k背景': '/4kbeijing/',
'4k手机壁纸': '/shoujibizhi/',
}
# url:title 字典
print('图片下载器'.center(50,'='))
for id,i in enumerate(dic.keys()):
print(f'{id+1}.{i}')
print(''.center(50, '='))
try:
idd = int(input('请选择图片序号:'))-1
num = int(input('请选择下载页数:'))
if num > 10:
print('为确保安全,最多下载10页!!')
num = 10
if num <= 0:
print('1<下载页数<10')
exit()
except:
print('请输入数字!')
exit()
print('正在获取下载链接-/-/')
name = list(dic.keys())[idd]
# 第一页链接
url_dict = get_urllist(dic[name])
# 后几页链接
for x in range(1,num):
url_dict.update(get_urllist(dic[name]+f'index_{x+1}.html'))
print('下载图片张数:',len(url_dict))
save_path = f'./图片/{name}'
if not os.path.exists(save_path):
os.mkdir(save_path)
# print(url_dict)
# 下载图片
# download(url_dict,save_path)
print('正在下载-/-/')
func = partial(download, save_path=save_path)
pool = Pool(10)
r = list(tqdm(pool.imap(func, url_dict.items()), total=len(url_dict.items()), ncols=80))
pool.close()
pool.join()
运行效果如下:
三、将图片设置为桌面背景
import os
import random
import ctypes
def fun(path):
# path = r"E:\py开发环境\图片\4k动物" # 存储图片的文件夹
file = os.listdir(path) # 打开文件夹
filepath = f" {path}\\{random.choice(file)}" # 随机选取某张图片,拼接绝对地址
print(filepath)
ctypes.windll.user32.SystemParametersInfoW(20, 0, filepath, 0) # 设置桌面壁纸
fun(r"E:\py开发环境\图片\4k风景")
四、增加定时(每隔30分钟刷新一次壁纸)
while 1: path = r"E:\py开发环境\图片\4k动漫"# // 存储图片的文件夹 fun(path) time.sleep(1800)
五、最后换一个图标,双击运行,大工告成
注意点:后面运行双击py文件时 会出现弹窗 需要将.py修改为.pyw即可
以上内容仅仅只做学习交流,切勿用做其他
欢迎一起学习进步wx:py-open-cv