我经常会使用 unsplash, 这里面的图片非常清爽,我的大多数文章的图片都是在这个网上找的,虽然也有同类型网站,但是用过一段时间以后基本都放弃了,图片质量参差不齐,筛选过程太费劲。

但是 unsplash 访问速度是个大问题,我经常会因为图片无法加载而被劝退。


今天一时手痒,顺手搜了 unsplash api 这个关键字,看官方有没有提供相关的 api 服务,还真有!


unsplash 提供了 2 个版本的 API。 一个是简单版,主要是给小型应用,流量比较少的 app 使用,可以通过 source.unsplash.com 进入;一个是进阶版的开发者中心 API, 支持更多流量的 app 使用,可以通过 unsplash.com/developers 进入。


Source API

source api 提供的功能比较简单。如果想获取一张随机图片,可以访问地址:

https://source.unsplash.com/random

这个地址会重定向到一张图片的地址,可以通过响应直接获取到一张图片。


如果图片太大,加载速度也会比较慢。你可以在 url 后面添加尺寸,控制返回的图片大小:

https://source.unsplash.com/random/800x600

如果原图片不是这种长宽比,unsplash 会对图片进行裁剪,某些部分就会丢失。如果你想保持图片的原始比例,可以把高度设成 0 :

https://source.unsplash.com/random/800x0

小提示

无论是什么 API, 你都可以在最后使用 /800x0 这样的方式控制图片的大小。

你可以指定获取某位作者的图片。比如我特别喜欢 Raamin ka 拍摄的照片。


我可以把它的用户名小写以后再去掉空格,添加到 /user 的后面:

https://source.unsplash.com/user/raaminka

这样我就能获取到这位作者拍摄的随机妹子照片了。不要忘了,你同样是可以控制图片尺寸的。


获取某个用户喜欢的照片:

https://source.unsplash.com/user/raaminka/like

unsplash api 还支持搜索。通常来说,我都会根据要写的文章的主题在 unsplash 上搜索图片。比如我要写一篇关于加密的文章,那我就会去搜索 encryption 相关的图片:

https://source.unsplash.com/800x0/?encryption

你也可以组合多个不同的关键字。如果没有图片同时包含这些关键字,则会优先匹配最后的关键字。

https://source.unsplash.com/800x0/?encryption,girl

现在我们每次访问同一个 API, 得到图片都不一样,因为是随机生成的。但是如果我们在每个 API 的后面添加 /daily 或者 /weekly, 则可以得到固定的一张图。需要注意,这并不是说这些图片更加热门或者质量更高,只是每天/每周保持不变的随机图片而已。

https://source.unsplash.com/800x0/daily?sports

Developer API

source api 的功能有限,而且如果访问频率太快总是会返回相同的图片。现在我们来看一下更加专业的开发者 API。

开发者 API 不是马上就可以使用的。你需要先注册成为开发者,得到一个 access token, 之后你可以通过这个 token 访问 API:

https://api.unsplash.com/photos?client_id=fowflsfg

这个 API 还支持 3 个参数

param Description
page 第几页
per_page 每页的图片数量
order_by 排序 (可以是: latest, oldest, popular; 默认是: latest)

其他的 api 文档你都可以在官网上查看到,这里不复制粘贴了。developer api 相比 resource api 的好处在于他可以同时提供多张图片,同时能获取到丰富的信息,比如作者,日期,大小等等。

在 unsplash 的主页只能看到编辑推荐的图片。没有最新的和流行的可以看,所以我写了个简陋的外壳查看最新和流行的图片。

首先定义一个函数获取图片:

def get_photos(order_by='popular', page=1, per_page=50):    """通过developer api 获取图片。"""    session = requests.Session()    url = 'https://api.unsplash.com/photos'    params = {        "client_id": "your access token",        "order_by": order_by,        "page": page,        "per_page": per_page    }    resp = session.get(url, params=params).json()    return resp

这样我可以得到 50 张图的 url 地址。

image.png

接下来使用 flask 搭建一个简易服务:

app = Flask(__name__)

@app.route('/')def index():    pictures = get_photos()    return render_template('index.html', pictures=pictures)

if __name__ == '__main__':    app.run()

直接把图片地址返回给前端页面:

{% for pic in pictures %} <a href="{{ pic.urls.regular }}">  <img src="{{ pic.urls.small }}">    </a>{% endfor %}

这样我通过访问本地的 http://localhost:5000 就可以看到很多的图片。我没有对图片展示效果进行任何的美化,这种凌乱的风格其实也挺好看的。后面如果用得多我在用 css 框架去做一下页面布局。

当我点击一张图片时,则可以进入这张图片的大图地址,并且可以直接作为链接地址应用到 markdown 当中,而在 unsplash 官方网站上不能直接获取链接地址。


最后补充一点。这个小应用只是作为 unsplash 网站访问非常慢的时候一个备选,并不能真正代替官网。对于图片的筛选和分类搜索操作,官网提供了非常人性化的操作,我就不重复造轮子了。对于这个备选服务,我把他设成了命令行形式,只需要在命令行输入 unsplash 就可以启动网站,还算比较方便。

点击 阅读原文 获取完整代码。

不用爬虫也可以轻松获取 unsplash 图片相关推荐

  1. python爬虫实战:批量获取VCG图片

    文章目录 前言 一.说明 二.获取网页路径 三.获取图片下载URL 四.批量下载图片 五.完整代码 六.效果展示 前言 当前对版权保护日益严格,因此在此说明获取的图像仅做研究和个人学习使用,禁止用作商 ...

  2. 不用爬虫,简单JQuery获取磁力链接,方便下载

    网页分析 有时候要获取网页上的电视剧资源,如果一个个点击复制,不太方便.这里,可以用chrome类型的浏览器,按F12,打开控制台,用下面的脚本来获取. <ul class="down ...

  3. 苹果cms后端/视频海报一键获取/按钮代码/轻松获取海报图片地址_多啦咪资源网

    视频海报一键获取按钮代码 修改版苹果cms可通用 后台视频海报操作截图 此代码测试后台版本为2020.04.06.1617 下方图文教程为列 每日更新影视海报图 Ctrl+F输入影片名字进行查找,请正 ...

  4. Python爬虫 | Python爬虫获取女友图片

    Python爬虫 | Python爬虫获取女友图片 前言 程序说明 二次元女友获取程序 观察网页结构 页面解析 创建图片保存路径 图片下载 格式转换 爬取结果展示 完整程序 前言 (又到了常见的无中生 ...

  5. Python爬虫--获取网页图片两步走:美女图片+王者荣耀皮肤

    文章目录 一.目标 1.实现当前页面的图片爬取: 2.实现二级网页下的图片爬取并分别存储 二.实现截图 二.代码 1.美女图片 2.王者荣耀皮肤 指导博客(阿里嘎多!) 一.目标 1.实现当前页面的图 ...

  6. 一篇文章教会你利用Python网络爬虫获取分类图片

    点击上方"IT共享之家",进行关注 回复"资料"可获赠Python学习福利 [一.项目背景] 博海拾贝是一支互联网从业者在线教育的团队,扎根于中国教育行业以及互 ...

  7. 利用Python网络爬虫获取分类图片,简单处理反爬教学

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 本文章来自腾讯云 作者:Python进阶者 想要学习Python?有问题得不到第一 ...

  8. lofter 爬虫_Python网络爬虫1 - 爬取网易LOFTER图片

    LOFTER是网易出品的优质轻博客,灵感源于国外的tumblr,但比之更加文艺,更加本地化.本人非常喜欢LOFTER的UI设计,以及其中的优质用户和内容,似乎网易并不擅长推广,所以受众并不广泛.这都是 ...

  9. Java如何快速获取网站图片

    文章目录 前提 一.新建Maven项目,导入Jsoup环境依赖 二.代码编写 心得: 前提 最近我的的朋友浏览一些网站,看到好看的图片,问我有没有办法不用手动一张一张保存图片! 我说用Jsoup丫! ...

  10. python获取网页图片_python抓取网页中的图片示例

    python抓取网页中的图片示例 代码如下: #coding:utf8 import re import urllib def getHTML(url): page = urllib.urlopen( ...

最新文章

  1. 深度学习的“瓶颈”与“遛狗”定理
  2. 如何解决http封包中gzip编码的html
  3. Dubbo 入门介绍
  4. php 获取返回值,求助 如何获取php socket 返回值
  5. flac3d命令流实例大全_Activiti6.0工作流引擎深度解析
  6. 腾讯股价创新高:总裁刘炽平减持40万股 套现2.5亿港元
  7. 微信小程序期末大作业,飞机大战
  8. 最简单的直播礼物连刷特效制作(带源码)
  9. 批处理学习笔记3:使用echo命令输出空格行
  10. emf(Enhanced MetaFile)图片格式——在印刷工业中应用于Windows操作系统的文件格式
  11. Windows系统通过命令行查看无线网络密码的三种方式
  12. NHibernate(一) 转自止于至善
  13. 2021-05-04 16:37:16.550 ERROR 3268 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] :
  14. Telemetry系统架构
  15. 【大黄蜂打印机cura切片软件配置】
  16. 求可以进行图片抽签的小程序
  17. #Python#错误之ModuleNotFoundError: No module named ‘yaml‘
  18. uni-app animation动画
  19. 轻松6步教您掌握TeeChart图表控件绘图攻略
  20. Intel汇编-带符号乘法

热门文章

  1. C语言 分支语句:if 语句和 switch语句
  2. C# IndexOf用法
  3. java线程倒计时_Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger...
  4. 怎么用计算机打出音乐符号,音乐符号怎么打出来(所有)
  5. 全面拆解携程云原生实践,打造智能弹性的云端酒店直连系统!
  6. 稞麦显示无法连接服务器,Modern Ops无法连接服务器是什么原因
  7. 北京大学公开课-影片赏析
  8. wordcloud python 如何不显示中文_Python词云库wordcloud中文显示问题详解
  9. Android Serach框架使详解
  10. 【ACM】- PAT. A1064 Complete Binary Serach Tree 【BST】