前言

unslpash绝对是找图的绝佳场所, 但是进网站等待图片加载真的令人捉急, 仿佛是一场拼RP的战争 然后就开始思考用爬虫帮我批量下载, 等下载完再挑选, 操作了一下不算很麻烦, 顺便也给大家提供一个粗糙的批量下载图片的思路.

分析

  1. 进入网站发现不存在翻页, 一直下滑就会一直就内容, 考虑是Ajar

    右键, 进入检查->NetWork->XHR, 查看一下页面的规律 https://unsplash.com/napi/search/photos?query=输入的查询关键字&xp=&per_page=每页的图像个数&page=第几页

  2. 获取了页面URL之后再来看看每次下载的图片的地址的规律https://images.unsplash.com/photo-1514883212130-343c0e4bd349?ixlib=rb-1.2.1&q=85&fm=jpg&crop=entropy&cs=srgb&dl=anh-nguyen-FZZkQZDQCtw-unsplash.jpg看起来很复杂的亚子, 先不管, 去响应内容里面看看有没有什么能用的, 来构造出这个复杂的URL

  3. 分析响应内容



    每一条都对应着该页的一个图片信息, 我们点开第一个看看





    可以看到第三行中有一个名为id的键对应的值为FZZkQZDQCtw, 在下载的URL中出来了.



    再往下翻, user中的name对应的值是不是和下载的URL中出现的anh-nguyen很像?只是分隔符不同.



    距离拼出来下载URL已经成功了一半, 前面还有一大串东西没有找出来, 再去urls中找找



    可以发现第一个full对应的url和下载url相似程度极高, 但是又多出来了一部分, 这个直接切片即可

至此构造下载URL需要的碎片已全部集齐, 马上就可以召唤神龙.

程序

import requests
from selenium import webdriver
import time
driver = webdriver.Chrome()
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36',
}
# 以搜索关键字job为例
base_url = 'https://unsplash.com/napi/search/photos?query=job&xp=&per_page=20&page=2'
response = requests.get(base_url, headers=headers)
data = response.json() # 获取响应内容
def get_data(base_url):
response = requests.get(base_url, headers=headers)
data = response.json()
return data # 从相应内容中构造下载图片的url
def download(d):
datas = d.get('results')
for data in datas:
id = data.get('id')
t_url = data.get('urls').get('full')
t = t_url.index('ixid=')
t_url = t_url[:t]
name = data.get('user').get('name')
name = name.replace(" ", '-')
url = t_url + '&dl=' + name + '-' + id + '-unsplash.jpg'
# 自动模拟浏览器下载
driver.get(url) data = get_data(base_url)
download(data)
# 可能最后的几张图片无法被下载就直接关闭浏览器了
time.sleep(30)
driver.quit()

测试

完美运行

拓展

既然已经发现了页面url的规律, 我们可以自己构造一个url, 一页可以多显示一些图片, 再进行下载.

def change_url(keyword, pre_page, page):
base_url = 'https://unsplash.com/napi/search/photos?query=' + keyword + '&xp=&per_page=' + str(pre_page) + '&page=' + str(page)
return base_url

python图片爬虫 - 批量下载unsplash图片的更多相关文章

  1. python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)

    python多线程爬虫项目() 爬取目标:斗图啦(起始url:http://www.doutula.com/photo/list/?page=1) 爬取内容:斗图啦全网图片 使用工具:requests ...

  2. Python随笔--爬虫(下载妹子图片)

  3. 批量下载网站图片的Python实用小工具

    定位 本文适合于熟悉Python编程且对互联网高清图片饶有兴趣的筒鞋.读完本文后,将学会如何使用Python库批量并发地抓取网页和下载图片资源.只要懂得如何安装Python库以及运行Python程序, ...

  4. 批量下载网站图片的Python实用小工具(下)

    引子 在 批量下载网站图片的Python实用小工具 一文中,讲解了开发一个Python小工具来实现网站图片的并发批量拉取.不过那个工具仅限于特定网站的特定规则,本文将基于其代码实现,开发一个更加通用的 ...

  5. python多线程批量下载远程图片

    python多线程使用场景:多线程采集, 以及性能测试等 . 数据库驱动类-简单封装下 mysqlDriver.py #!/usr/bin/python3 #-*- coding: utf-8 -*- ...

  6. C++ 根据图片url 批量 下载图片

    最近需要用到根据图片URL批量下载到本地的操作.查找了相关资料,记录在这儿. 1.首先在CSV文件中提取出url ifstream fin("C:\\Users\\lenovo\\Deskt ...

  7. Python + Selenium +Chrome 批量下载网页代码修改【新手必学】

    Python + Selenium +Chrome 批量下载网页代码修改主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt来达到在登陆状态下 批量打开并下载网页, ...

  8. Python爬虫实战:批量下载网站图片

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: GitPython PS:如有需要Python学习资料的小伙伴可以 ...

  9. [记录][python]python爬虫,下载某图片网站的所有图集

    随笔仅用于学习交流,转载时请注明出处,http://www.cnblogs.com/CaDevil/p/5958770.html 该随笔是记录我的第一个python程序,一个爬去指定图片站点的所有图集 ...

随机推荐

  1. OS OSTEP (Operating Systems Three Easy pieces 操作系统导论 )

    读<OSTEP>的一点重点记录与感悟 (未完) Chapter-2 第二章 1. 操作系统的设计目标:  抽象.高性能.保护.不间断运行. 抽象:建立一些“抽象”,让操作系统方便和易于使用 ...

  2. MySQL的安装、启动和基础配置 —— linux版本

    环境和资源地址 *** centos 7 *** http://repo.mysql.com/yum/mysql-5.6-community/ 安装 安装方式一(在线安装): # 查看和mysql有关 ...

  3. IIS中部署网站

    1.安装开IIS,打开IIS(Win+R -->inetmgr.exe) 2.进入IIS主界面,右键网站,选择“添加网站”. 3.在“添加网站”对话框中,添加网站名称. 4.点击应用程序池选择, ...

  4. es6 数组去重

    方法一: var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2]; var arr2 = arr.filter((x, index,se ...

  5. LeetCode刷题总结-哈希表篇

    本文总结在LeetCode上有关哈希表的算法题,推荐刷题总数为12题.具体考察的知识点如下图: 1.数学问题 题号:149. 直线上最多的点数,难度困难 题号:554. 砖墙,难度中等(最大最小边界问 ...

  6. 创建基于ASP.NET core 3.1 的RazorPagesMovie项目(二)-应用模型类配合基架生成工具生成Razor页面

    本节中,将学习添加用于管理跨平台的SQLLite数据库中的电影的类Movie.从ASP.NET core 模板创建的应用使用SQLLite数据库. 应用模型类(Movie)配合Entity Frame ...

  7. Mysql基于Mysql Cluster+MysqlRouter的集群部署方案

    http://note.youdao.com/noteshare?id=a61c4a6ff2b76e5305430eb66eb116e2&sub=4B4B6E8D0E2849F9B0DFB67 ...

  8. Javascript继承的问题

    说到Javascript的继承,相信只要是前端开发者都有所了解或应用,因为这是太基础的知识了.但不知各位有没有深入去理解其中的玄机与奥秘.今本人不才,但也想用自己的理解来说一说这其中的玄机和奥秘. 一 ...

  9. Dynamics 365 Portal Onpremise缓存问题

    最近被Dynamics 365 Portal的缓存问题折腾得不轻,Portal的配置进行缓存也就算了,连CRM中的记录也进行了长达15分钟到2小时的缓存,这是完全无法接受的 试想,我们有一个Porta ...

  10. Cesium 本地部署案例

    众所周知,cesium的服务器是搭建在国外的,所以我们国内的用户访问的时候贼慢.有时想查个api或者看个案例半天都进不去,今天我来说一下傻瓜式搭建本地的cesium环境,用于大家没事查资料用!步骤:1 ...