Python实现壁纸下载与轮换


Posted in Python onOctober 19, 2020

准备

下载安装Python3

官网下载即可,选择合适的版本:https://www.python.org/downloads/
安装一直下一步即可,记得勾选添加到环境变量。

安装pypiwin32

执行设置壁纸操作需要调用Windows系统的API,需要安装pypiwin32,控制台执行如下命令:

pip install pypiwin32

工作原理

两个线程,一个用来下载壁纸,一个用来轮换壁纸。每个线程内部均做定时处理,通过在配置文件中配置的等待时间来实现定时执行的功能。

壁纸下载线程

简易的爬虫工具,查询目标壁纸网站,过滤出有效连接,逐个遍历下载壁纸。

壁纸轮换线程

遍历存储壁纸的目录,随机选择一张壁纸路径,并使用pypiwin32库设置壁纸。

部分代码

线程创建与配置文件读取

def main():
  # 加载现有配置文件
  conf = configparser.ConfigParser()
  # 读取配置文件
  conf.read("conf.ini")
  # 读取配置项目
  search = conf.get('config', 'search')
  max_page = conf.getint('config','max_page')
  loop = conf.getint('config','loop')
  download = conf.getint('config','download')
  
  # 壁纸轮换线程
  t1 = Thread(target=loop_wallpaper,args=(loop,))
  t1.start()

  # 壁纸下载线程
  t2 = Thread(target=download_wallpaper,args=(max_page,search,download))
  t2.start()

遍历图片随机设置壁纸

def searchImage():
  # 获取壁纸路径
  imagePath = os.path.abspath(os.curdir) + '\images'
  if not os.path.exists(imagePath):
    os.makedirs(imagePath)
  # 获取路径下文件
  files = os.listdir(imagePath)
  # 随机生成壁纸索引
  if len(files) == 0:
    return
  index = random.randint(0,len(files)-1)
  for i in range(0,len(files)):
    path = os.path.join(imagePath,files[i])
    # if os.path.isfile(path):
    if i == index:
      if path.endswith(".jpg") or path.endswith(".bmp"):
        setWallPaper(path)
      else:
        print("不支持该类型文件")

设置壁纸

def setWallPaper(pic):
  # open register
  regKey = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)
  win32api.RegSetValueEx(regKey,"WallpaperStyle", 0, win32con.REG_SZ, "2")
  win32api.RegSetValueEx(regKey, "TileWallpaper", 0, win32con.REG_SZ, "0")
  # refresh screen
  win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER,pic, win32con.SPIF_SENDWININICHANGE)

壁纸查询链接过滤

def crawl(page,search):
  # 1\. 进入壁纸查询页面
  hub_url = 'https://wallhaven.cc/search?q=' + search + '&sorting=random&page=' + str(page)
  res = requests.get(hub_url)
  html = res.text

  # 2\. 获取链接
  ## 2.1 匹配 'href'
  links = re.findall(r'href=[\'"]?(.*?)[\'"\s]', html)
  print('find links:', len(links))
  news_links = []
  ## 2.2 过滤需要的链接
  for link in links:
    if not link.startswith('https://wallhaven.cc/w/'):
      continue
    news_links.append(link)
  print('find news links:', len(news_links))
  # 3\. 遍历有效链接进入详情
  for link in news_links:
    html = requests.get(link).text
    fing_pic_url(link, html)
  print('下载成功,当前页码:'+str(page));

图片下载

def urllib_download(url):
  #设置目录下载图片
  robot = './images/'
  file_name = url.split('/')[-1]
  path = robot + file_name
  if os.path.exists(path):
    print('文件已经存在')
  else:
    url=url.replace('\\','')
    print(url)
    r=requests.get(url,timeout=60)
    r.raise_for_status()
    r.encoding=r.apparent_encoding
    print('准备下载')
    if not os.path.exists(robot):
      os.makedirs(robot)
    with open(path,'wb') as f:
      f.write(r.content)
      f.close()
      print(path+' 文件保存成功')

import部分

import re
import time
import requests
import os
import configparser
import random
import tldextract #pip install tldextract
import win32api, win32gui, win32con
from threading import Thread

完整代码请查看GitHub:https://github.com/codernice/wallpaper

知识点

  • threading:多线程,这里用来创建壁纸下载和壁纸轮换两个线程。
  • requests:这里用get获取页面,并获取最终的壁纸链接
  • pypiwin32:访问windows系统API的库,这里用来设置壁纸。
  • configparser:配置文件操作,用来读取线程等待时间和一些下载配置。
  • os:文件操作,这里用来存储文件,遍历文件,获取路径等。

作者:华丽的码农
邮箱:codernice@163.com
个人博客:https://www.codernice.top
GitHub:https://github.com/codernice

以上就是Python实现壁纸下载与轮换的详细内容,更多关于python 壁纸下载与轮换的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python发送邮件接收邮件示例分享
Jan 21 Python
python定时检查某个进程是否已经关闭的方法
May 20 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
Python实现的质因式分解算法示例
May 03 Python
查看django版本的方法分享
May 14 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
Python实现使用request模块下载图片demo示例
May 24 Python
Python操作SQLite数据库过程解析
Sep 02 Python
pytorch 多分类问题,计算百分比操作
Jul 09 Python
用 Django 开发一个 Python Web API的方法步骤
Dec 03 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
Python调用REST API接口的几种方式汇总
Oct 19 #Python
Python爬虫抓取论坛关键字过程解析
Oct 19 #Python
python MD5加密的示例
Oct 19 #Python
python Yaml、Json、Dict之间的转化
Oct 19 #Python
Python pip 常用命令汇总
Oct 19 #Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 #Python
python Tornado框架的使用示例
Oct 19 #Python
You might like
博士208HAF收音机实习报告
2021/03/02 无线电
聊天室php&mysql(一)
2006/10/09 PHP
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
2012/07/16 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP图片等比例缩放生成缩略图函数分享
2014/06/10 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
2012/11/07 Javascript
Javascript单元测试框架QUnitjs详细介绍
2014/05/08 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
Node.js应用设置安全的沙箱环境
2018/04/23 Javascript
python处理json数据中的中文
2014/03/06 Python
Python实现删除文件但保留指定文件
2015/06/21 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Python中pass的作用与使用教程
2020/11/13 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
Structs界面控制层技术
2013/10/11 面试题
金融专业个人的自我评价
2013/10/18 职场文书
库房主管岗位职责
2013/12/31 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
上下班时间调整通知
2015/04/23 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
婚礼迎宾词大全
2015/08/10 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL