自给自足,python自动更换桌面


一张图片看久了有些审美疲劳,于是决定换个壁纸

思路:

  • 1.获取图片,这个需要编写一段爬虫,去某些网站获取高清图,我选的是wallpaper,别的网站后续会加上,为了加速,我开了多线程,由于就下载少量图片,所以不考虑对方网络的承受压力问题
  • 2.获取的图片覆盖之前的图片,这个只需要文件名覆盖写入即可
  • 3.定时启动、或者开机启动,win自带
  • 4.设置壁纸幻灯片播放,win自带
  • 5.升级,获取更多网站的图片(这里提一下:wallpaper有个ramdon,专门随机的,但是我没有直接爬取这个网站,因为预想爬指定标签内容~)
import re
import requests
import time
from lxml import etree
import random
import threading
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
}


def get_img_url_from_wallpaper(index, time=0):

    base_url = "https://wallpaper.wispx.cn/detail/{}"
    try:
        url = base_url.format(index)
        rep = requests.get(url, headers=headers)
        html = etree.HTML(rep.text)
        # print(rep.text)
        imgurl = html.xpath(
            "//a[@class='mdui-ripple mdui-ripple-white']/@href")[0]
        return imgurl
    except:
        print("爬取错误")
        time = time+1
        if time < 5:
            get_img_url_from_wallpaper(random.randint(2, 883), time)





def down_img_as_wallpaper(imgurl, i):
    rep = requests.get(imgurl, headers=headers)
    # print(imgurl)
    if rep.status_code == 200:
        with open('C:/Users/YBJB/Pictures/DesktopImages/wallpaper{}.jpg'.format(i), 'wb') as f:
            f.write(rep.content)


def multi_thread_wallpaper():
    t = []
    for i in range(10):
        img_index = random.randint(2, 883)
        t.append(threading.Thread(target=down_img_as_wallpaper, name="{}".format(
            i), args=(get_img_url_from_wallpaper(img_index), i)))
        t[i].start()
        print("thread{}:start".format(i))





if __name__ == '__main__':
    # base_urls = ['https://wallpaper.wispx.cn/detail/{}',
    #              'http://www.obzhi.com/{}.html']
    # randrange = [[2, 883], [30, 3000]]
    multi_thread_wallpaper()
    # multi_thread_obzhi("http://www.obzhi.com/{}.html")
    print("完成")


  • 编写完毕之后,将其放在开机启动文件夹中,这样每次开机都会运行一遍这个爬虫
    在这里插入图片描述
  • 接下来指定文件夹,右键个性化,背景改为幻灯片放映
  • 在这里插入图片描述
  • 点击浏览,选择我们下载图片的文件夹在这里插入图片描述
  • 其他就是图片设置,我们设置好了就算大功告成了。
  • 在这里插入图片描述

最终效果

在这里插入图片描述

  • 如果想要特定标签的图片,只需要修改URL,当然如果换网站那就另当别论,重写xpath吧
  • 如果有喜欢的壁纸,那就可以直接加进去,只有名字不被覆盖就行,就像这样

在这里插入图片描述

补充

  • 如果,想要效果明显一点,那么就可以吧壁纸切换时间设置的小一点,加大获取的图片数量,同时关闭我们的原有的壁纸插件什么的,那玩意可能会改变背景设置,最后给一张今天的桌面图~运气还不错,这张我还挺喜欢哈哈

在这里插入图片描述

补充2:请求头修改

  • 跑了几天,发现发现不再下载了,应当是机制改变了,捣鼓了一会发现需要再header中加入referer元素才可以下载,而referer保存这detail的URL,换句话说想下载图片,则必须经过detail页面,否则侥幸蒙对了下载地址也是不对的,于是最终代码是:
最终代码
import re
import requests
import time
from lxml import etree
import random
import threading
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"
}

def get_img_url_from_wallpaper_random( time=0):
    
    base_url = "https://wallpaper.wispx.cn/random"
    try:
        rep = requests.get(base_url, headers=headers)
        html = etree.HTML(rep.text)
        print(rep.text)
        imgurl = html.xpath(
            "//img/@src")[0]
        
        return imgurl
    except:
        print("爬取错误")
        time = time+1
        if time < 5:
            get_img_url_from_wallpaper_random(time)
def get_img_url_from_wallpaper_by_index(index, time=0):

    base_url = "https://wallpaper.wispx.cn/detail/{}"
    try:
        url = base_url.format(index)
        rep = requests.get(url, headers=headers)
        html = etree.HTML(rep.text)
        # print(rep.text)
        imgurl = html.xpath(
            "//a[@class='mdui-ripple mdui-ripple-white']/@href")[0]
        
        return imgurl , url
    except:
        print("爬取错误")
        time = time+1
        if time < 5:
            get_img_url_from_wallpaper_by_index(random.randint(2, 883), time)




def down_img_as_wallpaper(imgurl , url , i):
    header = headers
    header["referer"] =  url
    rep = requests.get(imgurl, headers=header)
    print(rep.status_code)
    if rep.status_code == 200:
        with open('D:/DesktopImages/wallpaper{}.jpg'.format(i), 'wb') as f:
            f.write(rep.content)


def multi_thread_wallpaper():
    t = []
    for i in range(10):
        img_index = random.randint(2, 883)
        print(img_index)
        img_url , referer_url = get_img_url_from_wallpaper_by_index(img_index)
        t.append(threading.Thread(target=down_img_as_wallpaper, name="{}".format(
            i), args=(img_url , referer_url, i)))
        # t.append(threading.Thread(target=down_img_as_wallpaper, name="{}".format(
            # i), args=(get_img_url_from_wallpaper_random(), i)))
        t[i].start()
        print("thread{}:start".format(i))

if __name__ == '__main__':
    # base_urls = ['https://wallpaper.wispx.cn/detail/{}',
    #              'http://www.obzhi.com/{}.html']
    # randrange = [[2, 883], [30, 3000]]
    multi_thread_wallpaper()
    # multi_thread_obzhi("http://www.obzhi.com/{}.html")
    print("完成")

补充3:打包+全部源码(有个exe可在没有python的x64电脑上用)

补充4:上传到CSDN下载了,设了0积分,不知道能不能下

  • CSDN下载地址
  • 另外,收集也是一种乐趣哈哈,每天有小惊喜,今日份是11号女嘉宾
    在这里插入图片描述
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椰子奶糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值