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中将字典转换成其json字符串
Jul 16 Python
简介Django中内置的一些中间件
Jul 24 Python
python线程池(threadpool)模块使用笔记详解
Nov 17 Python
python项目对接钉钉SDK的实现
Jul 15 Python
详解python中各种文件打开模式
Jan 19 Python
pytorch数据预处理错误的解决
Feb 20 Python
如何理解python中数字列表
May 29 Python
Python之Matplotlib文字与注释的使用方法
Jun 18 Python
Python接口自动化测试的实现
Aug 28 Python
详解如何修改python中字典的键和值
Sep 29 Python
5分钟快速掌握Python定时任务框架的实现
Jan 26 Python
Python开发.exe小工具的详细步骤
Jan 27 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
php实现的CSS更新类实例
2014/09/22 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
JQuery写动态树示例代码
2013/07/31 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
完善的jquery处理机制
2016/02/21 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
jQuery实现获取选中复选框的值实例详解
2018/06/28 jQuery
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
Python字符串中查找子串小技巧
2015/04/10 Python
在Python中使用成员运算符的示例
2015/05/13 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
python如何进行矩阵运算
2020/06/05 Python
python 常用日期处理-- datetime 模块的使用
2020/09/02 Python
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
波兰最大的宠物用品网上商店:FERA.PL
2019/08/11 全球购物
创意广告词
2014/03/17 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
产品销售计划书
2014/05/04 职场文书
物理课外活动总结
2014/08/27 职场文书
新兵入伍心得体会
2014/09/04 职场文书
刑事撤诉申请书
2015/05/18 职场文书
飞越疯人院观后感
2015/06/09 职场文书