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