所用到的库:

关于python的异步协程所用到的两个库 aiohttp 和 asyncio,能够实现异步请求,这里我为什么使用异步而不是使用requests的同步多线程,其中有几点:

第一点:在获取图片和视频这类数据上异步是要比同步快的,因为同步请求的时候每一个线程必须要走完一遍全程直到把数据保存下来才算任务结束。在这过程中,如果图片或者视频数据过大,需要等待网站返回其数据,在保存的时候也需要等待写入,这一过程中咱们是没有执行任何的操作,也就是白白浪费了这一段的时间。而异步在遇到这样的情况时,会将任务挂起,然后去执行别的任务,充分的利用上这一段空白的时间,当然速度会比同步快上许多。

第二点: 同步在密集型IO操作其速度是不如异步的,原因也如上所述。

代码部分:

先进入图虫观察网页的格式规律,发现图虫每一种类型的照片都会分一个部分展示出来,我们就挑一个风景的Q4自然风光下载TOP - 图虫创意-全球领先正版素材库-Adobe Stock中国独家合作伙伴

点每一张图片都会直接在原来的页面上弹出一个窗口,我们打开我们的Network工具进行抓包

如果同时加载出来的包太多,我们可以拿出一个关键字对他进行搜索,我们这里就拿这个的图片编号来操作,也可以用名字。可以看到是第二个包加载了这个图片,进入对应的url就能看到我们想要的图片了

接着下一张图片

这时候对比两张图片的url就能够找到规律

 他是根据图片的编号进行加载的,我们只需要把这个页面上所有图片的编号获取下来,套入url里面就能够拿到所有的图片数据了。

继续抓包我们就能够发现在这一个包里带有这个页面上所有图片的编号image_id,共一百张,我们请求这个包的url拿到响应的数据就能够下载这一百张图片啦!

这一部分的代码实现 

import asyncio
import aiohttp
import pprint
import random
import jsonpathsem = asyncio.Semaphore(10)
session = aiohttp.ClientSession()
async def get_response(url):'''请求数据'''headers = {'referer': 'https://stock.tuchong.com/topic?topicId=50346&from=%E7%B2%BE%E9%80%89%E5%9B%BE%E9%9B%86-%E4%B8%8B%E8%BD%BD%E6%8E%92%E8%A1%8C-%E5%AD%A3%E5%BA%A6%E6%A6%9C%E5%8D%95','cookie': 'source=extbaidupz1; creative_device_id=1b4bcf62-a38c-440d-86fb-370bca2bbf47; _tea_utm_cache_1224={%22utm_source%22:%22extbaidupz1%22%2C%22utm_term%22:%22sem_baidu_pz_duocai_tuchong01%22}; _tea_utm_cache_4682={%22utm_source%22:%22extbaidupz1%22%2C%22utm_term%22:%22sem_baidu_pz_duocai_tuchong01%22}; creative_token=eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2NTAxMTI3NzQsInZhbCI6IkNWM1RNV0Y2VVFCSkVCWkJJSTRDUDVCVlVKSFRERjJPUkdMRkg3QVQyR0pBSVNIN0I1NFEifQ.J461jBnObypzbfW7wi7HkDgOdpbO3RmHrMl-Ieh-bo4lSuLr9GZVs9Hl2mG_pjNd; Hm_lvt_f212e14a5ffb8199fd0e64061c054314=1650374933,1650378598,1650442802,1650442802; Hm_lvt_eaa57ca47dacb4ad4f5a257001a3457c=1650442803; Hm_lpvt_eaa57ca47dacb4ad4f5a257001a3457c=1650442803; Hm_lpvt_f212e14a5ffb8199fd0e64061c054314=1650442934','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'}async with sem:         # 限制并发try:async with session.get(url=url, headers=headers) as response:await asyncio.sleep(random.uniform(1, 1.5))return await response.json()except:print('请求失败:', url)#async def save(url):
#    '''保存图片'''async def main():'''主函数'''global sessionsession = aiohttp.ClientSession()           # 创建会议url = 'https://stock.tuchong.com/api/search/similar/image?image_id=914495302984269898&page=1&platform=&size=100&sort_by=0&term='scrape_index_task = [asyncio.ensure_future(get_response(url))]result = await asyncio.gather(*scrape_index_task)for data in result:image_id = jsonpath.jsonpath(data, '$.data.hits.[0:].image_id')         # 获取所有的图片编号print(image_id)await session.close()if __name__ == '__main__':asyncio.get_event_loop().run_until_complete(main())

可以看到是已经拿到所有的图片编号了

最后带上这些id去请求就可以拿到图片的数据啦!

异步获取到图虫上的图片相关推荐

  1. php文章远程图片,php实现异步将远程链接上内容(图片或内容)写到本地的方法

    本文实例讲述了php实现异步将远程链接上内容(图片或内容)写到本地的方法.分享给大家供大家参考,具体如下: /** * 异步将远程链接上的内容(图片或内容)写到本地 * * @param unknow ...

  2. php获取远程网页地址吗,php怎么获取远程网站上的图片的地址?有什么思路吗?...

    php怎么获取远程网站上的图片的地址?有什么思路吗? 比如获取百度的背景图片的路径 https://ss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/super/cr ...

  3. vue异步获取图片流文件进行图片显示

    图片流转图片地址 通过window.URL.createObjectURL可以将图片流转化为本地请求地址,然后直接通过<img src="转化后的地址"/> 注意: 需 ...

  4. 揭秘 React 异步获取数据的进化历程

    点击上方 前端瓶子君,关注公众号 回复算法,加入前端编程面试算法每日一题群 本篇文章,以模拟从『Hacker News API[1]』获取热门文章为例,通过一步步地代码优化和封装,阐述 React 异 ...

  5. Vue:echarts画图实战,异步获取数据在Vue上使用echarts进行画图

    Vue:echarts画图实战,异步获取数据在Vue上使用echarts进行画图 一.效果图 二.资源 主题编辑器 ECharts 教程 实现代码------想要进行实战的同学可以研究以下代码,下面的 ...

  6. 使用异步任务加载网络上的图片

    我们知道,如果要加载一个很耗时的操作,会阻塞主线程,这时我们可以想到开启一个新的线程,避免阻塞,在android中也有这样的问题,我们可以用异步任务来操作,异步任务也是开启一个线程,线程里面发一个消息 ...

  7. Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略

    Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名.合并两个不同路径下图片文件名等目录/路径案例.正确加载图片路径)之详细攻略 目录 利用python ...

  8. 获取服务器上图片的位置,怎么获取服务器上的图片地址

    怎么获取服务器上的图片地址 内容精选 换一换 通过云服务器或者外部镜像文件创建私有镜像时,如果云服务器或镜像文件所在虚拟机的网络配置是静态IP地址时,您需要修改网卡属性为DHCP,以使私有镜像发放的新 ...

  9. 淘宝店铺上新图片上传获取请求方法

    淘宝上新图片上传获取请求方法如下: 1.请求方法:POST [支持高并发同时请求] 点击获取请求key和secret Headers: 参数名称 参数值 是否必须 示例 备注 Content-Type ...

最新文章

  1. 曝贾扬清第二跳,加入阿里!达摩院或将承载中国下一个AI愿景?
  2. Element-ui学习笔记3--Form表单(二)
  3. 双电容单相电机接线图解_为什么单相电机要用电容,三相电机不需要?
  4. Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制--转载
  5. 深信服上网管理设备基本操作
  6. 包含html语言的超链接标记的网页_HTML是什么?
  7. android 模拟点击home,Android launcher中模拟按home键的实现
  8. asp.net core跨域访问ajax的验证访问
  9. HDU3954 线段树(区间更新 + 点更新)
  10. 华为二层创建vlan_华为二层交换机基本配置命令有哪些
  11. 纯电动两档箱实际项目模型,本模型基于Cruise软件和搭建完成,本资料包包含所有源文件
  12. matlab求工质热物性,以R245fa为工质的高温水源热泵样机研制及实验研究
  13. 异速联客户端未获取到服务器信息,异速联客户端登陆服务器地址
  14. c语言实现生成随机数
  15. Python学习笔记(三)列表
  16. python字符串后面添加字符串_Python字符串中添加、插入特定字符的方法
  17. 个人的网易云邮箱账号
  18. SK海力士加入日韩美三国财团 收购东芝芯片业务
  19. 项目案例:网上书店数据库设计
  20. 几种宽带无线接入技术的比较

热门文章

  1. slot 游戏 demo
  2. java baas_GitHub - JavaBaas/JavaBaasServer at 2c4c9a2de05059984f513a976041c5787bf8edc2
  3. bwiki样式的活动倒计时html代码(带渐变色进度条)
  4. 【AC.HASH】OpenHarmony啃论文俱乐部——在基于位置的隐私感知服务中实现K-匿名之浅析
  5. PHP解决某些特殊汉字符或汉字转码后成乱码或者空白的问题
  6. Unity 2D教程 | 骨骼动画:创建动画
  7. xp系统显示无打印机服务器,Xp系统显示“Windows无法打开添加打印机”的处理方法...
  8. ppp协议提供什么服务器,PPP的工作原理是什么?单片机PPP协议有什么应用?
  9. TOMCAT HTPPS
  10. 由夏时令引起的java世界时间不一致问题