收藏|Unsplash高清壁纸批量下载(源码+工具)!

简介: 收藏|Unsplash高清壁纸批量下载(源码+工具)!

本期导读

Unsplash 是一个免费高质量照片的网站,都是真实的摄影照片,照片分辨率也很大,对设计师朋友来说是非常好的素材,对一些插图类文案写作的朋友也非常实用,当壁纸效果也很不错哦。我已将相应功能代码封装成exe工具,不用安装,便可直接运行,文末附有代码+工具获取方式。


01

Unsplash网址:https://unsplash.com/

我们先看一下手动下载的过程,注意不是右键图片另存为,右键另存的方式获取的图片是经过一定比例压缩的,清晰度会降低很多。以Nature为例,点击Download free,选择下载路径即可,图片大小1.43M。

接下来,分析具体网页

首先,我们观察到网页底部有页码选择项,我们试着下拉网页滑块,发现图片是动态加载的,也就是是我们下拉网页时,后续图片才陆续显示。

通过几次操作,发现当下拉时,网页会发出如下几个请求,点开其中一个,可以看到图片总数量:10000,总页数:500。

我们把几个url拿出来看一下:

以上链接只有page参数不同,而且是依次递增的,还算是比较友好,请求时依次遍历就可以了。

页码的问题已经解决,接下来分析每张图片的链接

我们看到result列表长度正好是20,与请求中的per_page值相同,毫无疑问,我们要找的每张图片链接就在这里。


分析网页往往比较耗时,不过总的来说还算顺利,下面我们正式爬取图片。


02

运行环境,需要用到以下几个包:

import time
import random
import json
import requests
from fake_useragent import UserAgent
  • time:定时
  • random:生成随机数
  • json:处理json格式数据
  • requests:网页请求
  • fake_useragent:代理

模拟代理,以网页的身份访问服务器,避免请求被服务器判定为机器爬虫而不响应请求。

ua = UserAgent(verify_ssl=False)
headers = {'User-Agent': ua.random}

根据响应,获取所有图片链接:

def getpicurls(i,headers):
    picurls = []
    url = 'https://unsplash.com/napi/search/photos?query=nature&per_page=20&page={}&xp=feedback-loop-v2%3Aexperiment'.format(i)
    r = requests.get(url, headers=headers, timeout=5)
    time.sleep(random.uniform(3.1, 4.5))
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    allinfo = json.loads(r.text)
    results = allinfo['results']
    for result in results:
        href = result['urls']['full']
        picurls.append(href)
    return picurls

保存图片文件:

def getpic(count,url):
    r = requests.get(url, headers=headers, timeout=5)
    with open('pictures/{}.jpg'.format(count), 'wb') as f:
        f.write(r.content)

看一下成果吧:

03

exe工具运行结果:

注意:

  • 尽量不要频繁的爬取,以免影响网络秩序!
  • 图片为外网高清图片,爬取速度和网络有关,一般不会太快。
  • 可以构建代理池爬取,速度更快。


如需工具请在公众号后台回复:unsplash其他问题可以私信、留言,共同学习。

往期推荐

程序员必须掌握的十大排序算法(上)

程序员必须掌握的十大排序算法(下)

Python送你王者荣耀官网全套皮肤!!!

Python 告诉你《你好,李焕英》为什么能超越《唐探3》!!!


END


以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、点在看也可以分享到朋友圈让更多人知道哦

相关文章
如何在cmd中打开指定文件夹路径
如何在cmd中打开指定文件夹路径
3467 0
|
2月前
|
前端开发 JavaScript API
前端组件库——shadcn/ui知识点大全(一)
教程来源 http://uklgy.cn/ shadcn/ui 是2026年React生态引领变革的UI方案:不提供npm黑盒包,而是通过CLI将可定制、带完整类型与无障碍支持的组件源码(如`button.tsx`)直接复制到项目中。基于Radix UI、Tailwind CSS与自研CLI,赋予开发者对样式、行为与API的完全控制权。GitHub星标超11万,周下载近200万。
|
机器学习/深度学习 人工智能 自然语言处理
简述人工智能,及其三大学派:符号主义、连接主义、行为主义
简述人工智能,及其三大学派:符号主义、连接主义、行为主义
8097 0
简述人工智能,及其三大学派:符号主义、连接主义、行为主义
|
安全
【📕分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
Redisson 的看门狗机制是解决分布式锁续期问题的核心功能。当通过 `lock()` 方法加锁且未指定租约时间时,默认启用 30 秒的看门狗超时时间。其原理是在获取锁后创建一个定时任务,每隔 1/3 超时时间(默认 10 秒)通过 Lua 脚本检查锁状态并延长过期时间。续期操作异步执行,确保业务线程不被阻塞,同时仅当前持有锁的线程可成功续期。锁释放时自动清理看门狗任务,避免资源浪费。学习源码后需注意:避免使用带超时参数的加锁方法、控制业务执行时间、及时释放锁以优化性能。相比手动循环续期,Redisson 的定时任务方式更高效且安全。
1122 24
【📕分布式锁通关指南 07】源码剖析redisson利用看门狗机制异步维持客户端锁
|
存储 编解码 算法
哈夫曼树完全解析:从原理到应用
哈夫曼树是一种带权路径长度最短的二叉树,广泛应用于数据压缩领域。它通过为高频元素分配短编码、低频元素分配长编码,显著减少数据量。构建时根据权重动态合并节点,最终生成无歧义前缀编码。其核心特性包括最优压缩效率、贪心策略有效性和高空间利用率。在现代应用中,哈夫曼编码被用于ZIP压缩、PNG图像、HTTP/2头部压缩及多媒体处理等领域。例如,对字符串“ABRACADABRA”进行压缩,可将88bit数据降至26bit,压缩率达70.5%。
|
NoSQL Java Redis
Redlock分布式锁高并发下有什么问题
Redlock分布式锁在高并发场景下可能面临的问题主要包括:网络延迟、时钟偏移、单点故障、宕机重启问题、脑裂问题以及效率低等。接下来,我将使用Java代码示例来说明其中一些问题。
560 12
|
机器学习/深度学习 人工智能 自然语言处理
人工智能基础知识:介绍人工智能的历史,基本概念和应用领域
人工智能基础知识:介绍人工智能的历史,基本概念和应用领域
16859 0
|
运维 监控 容灾
实现Java应用的高可用与自动化运维
实现Java应用的高可用与自动化运维