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安装模块如何通过setup.py安装(超简单)
May 05 Python
Python堆排序原理与实现方法详解
May 11 Python
在python中只选取列表中某一纵列的方法
Nov 28 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
详解python编译器和解释器的区别
Jun 24 Python
在python中利用numpy求解多项式以及多项式拟合的方法
Jul 03 Python
Pytorch实现GoogLeNet的方法
Aug 18 Python
Python字典底层实现原理详解
Dec 18 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
python实现PCA降维的示例详解
Feb 24 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
使用python+pygame开发消消乐游戏附完整源码
Jun 10 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
php绘图之生成饼状图的方法
2015/01/24 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
2016/01/08 PHP
php命令行写shell实例详解
2018/07/19 PHP
Javascript Math对象
2009/08/13 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
utf-8编码引起js输出中文乱码的解决办法
2010/06/23 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
基于JavaScript实现瀑布流效果
2017/03/29 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
Taro集成Redux快速上手的方法示例
2018/06/21 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
小程序转发探索示例
2019/02/19 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
python3判断url链接是否为404的方法
2018/08/10 Python
python 不同方式读取文件速度不同的实例
2018/11/09 Python
python 读取数据库并绘图的实例
2019/12/03 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
小学生节约用水倡议书
2014/05/15 职场文书
教师批评与自我批评发言稿
2014/10/15 职场文书
平遥古城导游词
2015/02/03 职场文书
二胎满月酒致辞
2015/07/29 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
MongoDB数据库的安装步骤
2021/06/18 MongoDB
CSS实现背景图片全屏铺满自适应的3种方式
2022/07/07 HTML / CSS
element tree树形组件回显数据问题解决
2022/08/14 Javascript