溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Python實現(xiàn)壁紙下載與輪換

發(fā)布時間:2020-10-27 17:37:55 來源:億速云 閱讀:171 作者:Leah 欄目:開發(fā)技術

本篇文章給大家分享的是有關使用Python實現(xiàn)壁紙下載與輪換,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

安裝pypiwin32

執(zhí)行設置壁紙操作需要調(diào)用Windows系統(tǒng)的API,需要安裝pypiwin32,控制臺執(zhí)行如下命令:

pip install pypiwin32

工作原理

兩個線程,一個用來下載壁紙,一個用來輪換壁紙。每個線程內(nèi)部均做定時處理,通過在配置文件中配置的等待時間來實現(xiàn)定時執(zhí)行的功能。

壁紙下載線程

簡易的爬蟲工具,查詢目標壁紙網(wǎng)站,過濾出有效連接,逐個遍歷下載壁紙。

壁紙輪換線程

遍歷存儲壁紙的目錄,隨機選擇一張壁紙路徑,并使用pypiwin32庫設置壁紙。

部分代碼

線程創(chuàng)建與配置文件讀取

def main():
  # 加載現(xiàn)有配置文件
  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('文件已經(jīng)存在')
  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:多線程,這里用來創(chuàng)建壁紙下載和壁紙輪換兩個線程。
  • requests:這里用get獲取頁面,并獲取最終的壁紙鏈接
  • pypiwin32:訪問windows系統(tǒng)API的庫,這里用來設置壁紙。
  • configparser:配置文件操作,用來讀取線程等待時間和一些下載配置。
  • os:文件操作,這里用來存儲文件,遍歷文件,獲取路徑等。

以上就是使用Python實現(xiàn)壁紙下載與輪換,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降摹OM隳芡ㄟ^這篇文章學到更多知識。更多詳情敬請關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI