这次我选择了去下载无版权高清图片,因为做自媒体的人很怕侵权,找无版权的图片仿佛成了日常工作,所以这次我选择了这个网站

https://unsplash.com/

那下面来看看使用异步以及不使用异步的差别?

(右边是使用异步的,左边是没有使用异步的,由于用于测试,所以选择下载12张图片即可)

可以看到,在使用异步之后运行的时间比不使用异步的程序少了差不多6倍的时间,是不是感觉到high了起来?那我们分析下怎样爬取吧。

1.找目标网页

这个网站首页就有一堆图片,而且往下拉时还会自动刷新,很明显是个ajax加载,但不怕,动态加载这东西我们之前讲过了,所以打开开发者工具看下是怎样的请求吧。

往下拉的时候很容易看到这个请求,这个是一个get请求,状态码为200,网址为https://unsplash.com/napi/photos?page=3&per_page=12&order_by=latest,有三个参数,很容易知道page参数就是页,这个参数是变化的,其他的参数都是不变的。

返回来的内容是个json类型,里面的links下的download就是我们图片下载的链接,现在所有东西都清楚了,那下面就是代码了。

2.代码部分

async def __get_content(self, link):async with aiohttp.ClientSession() as session:response = await session.get(link)content = await response.read()return content

这个是获取图片的内容的方法,aiohttpClientSession和requests.session的用法是差不多,只不过获取unicode编码的方法变成了read()

下面是完整代码

import requests, os, time
import aiohttp, asyncioclass Spider(object):def __init__(self):self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'}self.num = 1if '图片' not in os.listdir('.'):os.mkdir('图片')self.path = os.path.join(os.path.abspath('.'), '图片')os.chdir(self.path)  # 进入文件下载路径async def __get_content(self, link):async with aiohttp.ClientSession() as session:response = await session.get(link)content = await response.read()return contentdef __get_img_links(self, page):url = 'https://unsplash.com/napi/photos'data = {'page': page,'per_page': 12,'order_by': 'latest'}response = requests.get(url, params=data)if response.status_code == 200:return response.json()else:print('请求失败,状态码为%s' % response.status_code)async def __download_img(self, img):content = await self.__get_content(img[1])with open(img[0]+'.jpg', 'wb') as f:f.write(content)print('下载第%s张图片成功' % self.num)self.num += 1def run(self):start = time.time()for x in range(1, 101):  # 下载一百页的图片就可以了,或者自己更改页数links = self.__get_img_links(x)tasks = [asyncio.ensure_future(self.__download_img((link['id'], link['links']['download']))) for link in links]loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.wait(tasks))if self.num >= 10:  # 测试速度使用,如需要下载多张图片可以注释这段代码breakend = time.time()print('共运行了%s秒' % (end-start))def main():spider = Spider()spider.run()if __name__ == '__main__':main()

可以看到不到50行的代码就可以把整个网网站的图片下载下来了,不得不吹一下python的强大~~~

python使用异步下载高清大图相关推荐

  1. python爬虫 批量下载高清大图

    文章目录 前言 下载免费高清大图 下载带水印的精选图 代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小 ...

  2. 第二弹!python爬虫批量下载高清大图

    文章目录 前言 下载免费高清大图 下载带水印的精选图 代码与总结 前言 在上一篇写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!中,我们在未登录的情况下实现了图虫创意无水印高清小 ...

  3. python爬虫批量下载高清大图

    推荐原来的博主文章https://blog.csdn.net/qq_40693171/article/details/102220448

  4. vscode在html看到图片的插件_利用花瓣插件 下载高清大图

    作为设计师,我们经常需要下载一些图片作为灵感参考或者设计素材,但是有时我们在一些网站上无法下载到被"隐藏"的高清大图.那么今天帮主就来和大家分享一个小技巧 利用花瓣插件 下载高清大 ...

  5. python爬虫如何下载高清图片

    代码编写 爬虫编写 提取精选图片页面中的套图链接 detail_urls = response.xpath("//ul[@class='content']/li/a/@href") ...

  6. 爬虫案例:利用python爬虫关键词批量下载高清大图

    环境: python3+pycharm+requests+re+BeatifulSoup+json 这个确实也属实有一些勉强,不少童鞋私信问我有木有 下载大图 的源码,我说可能会有,现在分享给大家. ...

  7. 利用python爬虫关键词批量下载高清大图!

    前言 在上一篇 写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片 !中,我们在未登录的情况下实现了图虫创意 无水印高清小图 的批量下载.虽然小图能够在一些移动端可能展示的还行,但是 ...

  8. 爬虫python创意_爬虫案例:利用python爬虫关键词批量下载高清大图

    环境: python3+pycharm+requests+re+BeatifulSoup+json 这个确实也属实有一些勉强,不少童鞋私信问我有木有 下载大图 的源码,我说可能会有,现在分享给大家. ...

  9. 使用爬虫下载汽车之家高清大图

    好久没写爬虫,今天算是复习下Scrapy,正所谓温故而知新. 这次爬取的目标网站是汽车之家的精选高清大图. 先看看运行结果吧 页面分析 下面我们来分析一下图片精选页面 这个页面中全部都是套图,我们打开 ...

最新文章

  1. 当科学遇上众包:9个值得关注的前沿科技算力众包平台
  2. cocos2d-x 3.x 场景切换特效大集合
  3. 多个反斜杠的消除处理
  4. 基于 Kotlin 一行代码实现 android 导航栏 BottomBar
  5. Java后端WebSocket的Tomcat实现(转载)
  6. sprinigboot(2.2.4)+mysql引入druid的性能监控StateFilter
  7. matlab提示未定义wc,WooCommerce 教程:修复致命错误调用未定义的函数wc_get_order() - WooCommerce 微站...
  8. LwIP应用开发笔记之八:LwIP无操作系统HTTP客户端
  9. 同步方法及同步代码块
  10. Java缓存Ehcache-Ehcache的Cache预热机制及代码实现(Cache Warming for multi-tier Caches)
  11. 刚开始用 Go 做项目开发时都会面临哪些问题?
  12. memcpy函数的使用方法
  13. win7自带桌面便签
  14. 重装系统找不到固态_安装Win10系统没有固态硬盘(双硬盘找不到固态硬盘)怎么解决?...
  15. RTSP支持MPEG-4格式监控
  16. 创建标准化工程目录脚本
  17. javascript英语单词音节拆分_英语单词音节拆分程序
  18. excel数据分析案例——电信运营商用户流失分析
  19. Python 使用 pip 安装 Matplotlib
  20. ios使用stream抓包

热门文章

  1. Vmware安装Kali Linux2020.2(详细安装教程,爬坑指南,详细到哭)
  2. 斯坦福大学——人工智能本科4年课程清单
  3. Three.js 模型闪烁重影(深度问题)
  4. 玻璃大王曹德旺:中国除了人便宜,什么都比美国贵
  5. qq阅读java2009_在线书城全新改版 QQ阅读Java版 V1.7更新
  6. YOLOV8改进:在c2f模块中的不同位置加入NAMAAttention注意力机制
  7. 微信小程序订餐系统需要服务器吗,微信小程序订餐系统怎么开发 怎么创建微信外卖小程序...
  8. 数据中心消防电气安全综合解决方案
  9. 图书商城系统,可运行
  10. 数据科学家面试问答集锦(109个常见问题和回答)