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与sqlite3实现解密chrome cookie实例代码
Jan 20 Python
pandas中去除指定字符的实例
May 18 Python
python matlibplot绘制3D图形
Jul 02 Python
Python绘制的二项分布概率图示例
Aug 22 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
Python中is和==的区别详解
Nov 15 Python
python实现简单flappy bird
Dec 24 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
python关于调用函数外的变量实例
Dec 26 Python
Python  Asyncio模块实现的生产消费者模型的方法
Mar 01 Python
Python使用openpyxl复制整张sheet
Mar 24 Python
总结几个非常实用的Python库
Jun 26 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实现给定一列字符,生成指定长度的所有可能组合示例
2019/06/22 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
date.parse在IE和FF中的区别
2010/07/29 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
jquery提交form表单时禁止重复提交的方法
2014/02/13 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
2016/05/21 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
js 实现数值的千分位及保存小数方法(推荐)
2016/08/01 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
JS实现的图片预览插件与用法示例【不上传图片】
2016/11/25 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
浅析JS中回调函数及用法
2018/07/25 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python入门学习指南分享
2018/04/11 Python
python操作mysql代码总结
2018/06/01 Python
keras load model时出现Missing Layer错误的解决方式
2020/06/11 Python
HTML5实现桌面通知 提示功能
2017/10/11 HTML / CSS
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
Servlet面试题库
2015/07/18 面试题
试用期员工考核制度
2014/01/22 职场文书
会计顶岗实习心得
2014/01/25 职场文书
环保倡议书500字
2014/05/15 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers