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中return语句用法实例分析
Aug 04 Python
Python 如何访问外围作用域中的变量
Sep 11 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
python如何统计序列中元素
Jul 31 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
介绍一款python类型检查工具pyright(推荐)
Jul 03 Python
python 将日期戳(五位数时间)转换为标准时间
Jul 11 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 Python
sklearn的predict_proba使用说明
Jun 28 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
phpmyadmin的#1251问题
2006/11/25 PHP
smarty基础之拼接字符串的详解
2013/06/18 PHP
php+mysql实现无限分类实例详解
2015/01/15 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
jquery获取被勾选的checked(选中)的那一行的3列和4列的值
2013/07/04 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
理解JavaScript中Promise的使用
2016/01/18 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
node文件上传功能简易实现代码
2017/06/16 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
通过javascript实现段落的收缩与展开
2019/06/26 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
Django imgareaselect手动剪切头像实现方法
2015/05/26 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python中bisect的使用方法
2019/12/31 Python
Python requests获取网页常用方法解析
2020/02/20 Python
python获取百度热榜链接的实例方法
2020/08/25 Python
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
网络技术专业求职信
2014/02/18 职场文书
三爱活动实施方案
2014/03/19 职场文书
学校评语大全
2014/05/06 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
中考标语大全
2014/06/05 职场文书
单位委托书怎么写
2014/09/21 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
深入理解 Golang 的字符串
2022/05/04 Golang
java获取一个文本文件的编码(格式)信息
2022/09/23 Java/Android