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 相关文章推荐
本地文件上传到七牛云服务器示例(七牛云存储)
Jan 11 Python
Python对两个有序列表进行合并和排序的例子
Jun 13 Python
关于Python元祖,列表,字典,集合的比较
Jan 06 Python
pandas object格式转float64格式的方法
Apr 10 Python
python实现音乐下载器
Apr 15 Python
对pycharm 修改程序运行所需内存详解
Dec 03 Python
python地震数据可视化详解
Jun 18 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
Python 中由 yield 实现异步操作
May 04 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
Dec 01 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
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
Bootstrap实现下拉菜单效果
2016/04/29 Javascript
jQuery拖拽通过八个点改变div大小
2020/11/29 Javascript
Angular在一个页面中使用两个ng-app的方法(二)
2017/02/20 Javascript
js评分组件使用详解
2017/06/06 Javascript
vue轮播图插件vue-awesome-swiper的使用代码实例
2017/07/10 Javascript
AntV F2和vue-cli构建移动端可视化视图过程详解
2019/10/08 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Vue2.x-使用防抖以及节流的示例
2021/03/02 Vue.js
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
Python中的CURL PycURL使用例子
2014/06/01 Python
python从sqlite读取并显示数据的方法
2015/05/08 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
基于python实现计算两组数据P值
2020/07/10 Python
解决c++调用python中文乱码问题
2020/07/29 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
struct与class的区别
2014/02/03 面试题
基于Python 函数和方法的区别说明
2021/03/24 Python
员工培训邀请函
2014/01/11 职场文书
《临死前的严监生》教学反思
2014/02/13 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
会计工作总结范文2014
2014/12/23 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书