『python爬虫』19. aiohttp模块应用之下载图片(保姆级图文)

news2024/11/25 0:47:42

目录

    • 1. aiohttp库安装
    • 2. 代码解析
    • 3. 实现代码
    • 总结


欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中

通过爬取下载得到图片
在这里插入图片描述

1. aiohttp库安装

pip install aiohttp

这个库的作用基本上和request一致,理解为协程中的request。


2. 代码解析

协程实现的session aiohttp.ClientSession()

这里用with表示在这个结构结束后自动关闭我们的aiohttp.ClientSession(),主要是为了省这一行代码,下面的with同理

async with aiohttp.ClientSession() as session:  # requests的session
	内容···

注意读取内容是异步的. 需要await挂起, 如果后面用到resp.text()也是同样的

            with open(name, mode="wb") as f:  # 创建文件
                f.write(await resp.content.read())  # 读取内容是异步的. 需要await挂起, resp.text()

上面保存文件的代码也可以用另一个库aiofiles库(协程中的文件管理库)实现


3. 实现代码

注意你可能会遇到报错,但是图片正常爬取,想要了解详情可看文章
【Python】aiohttp库报错:raise RuntimeError(‘Event loop is closed‘) RuntimeError: Event loop is closed

# requests.get() 同步的代码 -> 异步操作aiohttp
# pip install aiohttp

import asyncio
import aiohttp

# 事先准备好的图片url列表
urls = [
    "http://kr.shanghai-jiuxin.com/file/2020/1031/191468637cab2f0206f7d1d9b175ac81.jpg",
    "http://kr.shanghai-jiuxin.com/file/2020/1031/563337d07af599a9ea64e620729f367e.jpg",
    "http://kr.shanghai-jiuxin.com/file/2020/1031/774218be86d832f359637ab120eba52d.jpg"
]


async def aiodownload(url):
    # 发送请求.
    # 得到图片内容
    # 保存到文件
    name = url.rsplit("/", 1)[1]  # 从右边切, 切一次. 得到[1]位置的图片名称-> 774218be86d832f359637ab120eba52d.jpg

    async with aiohttp.ClientSession() as session:  # requests的session
        async with session.get(url) as resp:  # resp = requests.get() 每次都request请求得到图片
            # 请求回来了. 写入文件
            # 写入文件的部分可以不自己写,用 aiofiles库(协程中的文件管理库)实现
            with open(name, mode="wb") as f:  # 创建文件
                f.write(await resp.content.read())  # 读取内容是异步的. 需要await挂起, resp.text()

    print(name, "图片爬取结束")


async def main():
    tasks = []
    for url in urls:
        tasks.append(aiodownload(url))
    await asyncio.wait(tasks)#提交任务

if __name__ == '__main__':
    # raise RuntimeError('Event loop is closed')
    # RuntimeError: Event loop is closed
    # 如果出现上面的报错,取消注释下一行代码
    # asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
    asyncio.run(main())

总结

大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2023 mzh

Crated:2023-3-1

欢迎关注 『python爬虫』 专栏,持续更新中
欢迎关注 『python爬虫』 专栏,持续更新中
『未完待续』


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/519976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot——RUST风格以及如何快速发送不同方式的请求

RUST风格: 简单来说,RUST就是一种将请求方式融合到路径中的一种请求路径书写风格,注意这里是风格,不是规定,我们也可以不使用他或者不是非常严格的按照他规定的样式来写,但是由于行业中大多数的人在编程的…

Firefox 112 发布:右键单击显示密码、改进标签管理等!

Firefox 发布 112 版本,为我们带来了显示密码的新选择、同时改进了标签管理等。 Mozilla 于 2023 年 4 月 11 日发布了 Firefox 112,新版本包含一些令人兴奋的新功能和改进。该浏览器的最新版本带来了一些功能以增强用户体验和提高性能。 在 Ubuntu 上运…

UNIAPP实战项目笔记69 订单确认时显示为默认地址

UNIAPP实战项目笔记69 订单确认时显示为默认地址 思路 需要用到vuex 默认显示isDefault为1的地址 案例截图 订单结算页面 地址页面 代码 shopcart.vue <template><view class"shop-cart"><template v-if" list.length > 0 "><!-…

【Linux学习笔记】设备驱动模型详解——总线、设备、驱动和类

学习内容 设备驱动模型视频讲解 简介 设备驱动是计算机系统中的重要组成部分&#xff0c;它们允许操作系统与硬件交互。设备驱动模型是一种通用的抽象框架&#xff0c;用于描述操作系统如何管理硬件设备。这里我们将介绍设备驱动模型中的四个关键概念&#xff1a;总线、设备…

GitLab+Drone CI持续集成自动部署web项目

一、环境介绍 1.gitlab服务器 172.16.11.1 搭建参考&#xff1a;Gitlab教程 2.Drone服务器 172.16.11.2 搭建参考: 基于gitlab搭建Drone CI 3.web服务器 172.16.11.3 已配置好nginx相关web服务&#xff0c;这里nginx配置的web目录为/www/test 还有生成ssh key密钥即可&am…

编程的未来

从 ChatGPT 诞生至今&#xff0c;在程序员的圈子里&#xff0c;我们一直有两种讨论&#xff1a; 最开始所恐慌的&#xff1a;编程没有未来&#xff0c;ChatGPT 是不是要取代程序员。编程的方式前所未有地发生了变化。 现如今&#xff0c;GitHub Copilot Chat 可以让开发者们直…

算法修炼之练气篇——练气十八层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

支付系统设计三:渠道网关设计02-客户端报文解析

文章目录 前言一、后台配置管理1.1 渠道配置1.1.1 渠道基本信息新增1.1.2 渠道交易类型配置1.1.3 渠道商户信息配置1.1.4 账户配置1.1.5 交易类型机构配置 1.2 渠道通讯配置1.2.1 内部渠道通讯1.2.1 外部渠道通讯 1.3 资源配置1.4 证书管理1.5 路由配置 二、运行时逻辑处理1. 控…

Fluent的视角设置

1 背景 针对不同设计方案在同一工况下的差异点进行细节分析&#xff0c;其中一个很重要的要求就是需要在同一视角下比较不同设计方案的差异性。设置视角并进行快速重用是很重要的提高仿真效率的方法。 2 视角设置 视角设置有2类方法&#xff1a;手动拖拉和定量指定。 手动拖拉即…

一图看懂 tomli 模块:一个 TOML解析器、使用 mformat -toc 生成的目录,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 tomli 模块&#xff1a;一个 TOML解析器、使用 mformat -toc 生成的目录&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模块图&am…

前端开发中,定位bug的几种常用方法

目录 第一章 前言 第二章 解决bug的方法 2.1 百度 2.2 有道翻译 2.3 debugger 2.4 console.log 日志打印 2.5 请求体是否携带参数 2.6 注释页面渲染代码 2.7 其他 第三章 尾声 备注&#xff1a;该文章只是本人在工作/学习中常用的几种方法&#xff0c;如果有不对大家…

智慧园区移动应用发展面临瓶颈,如何解决?

智慧园区移动应用将在多元化服务、生态建设、智能化管理和跨界融合等方面发展&#xff0c;成为园区管理和服务的重要手段之一&#xff0c;为员工和企业提供更加智能化和便捷化的管理和服务。伴随着智慧城市的建设和智慧园区的崛起&#xff0c;智慧园区数字一体化建设成为园区发…

docker搭建nginx负载均衡

一点小背景 docker起了几个服务&#xff0c;没有配置端口映射&#xff0c;导致不能通过网络访问。当然&#xff0c;更简单的方式是加端口映射&#xff0c;笔者的情况更复杂一些&#xff0c;就想到了用nginx映射一下。 Nginx&#xff08;发音同“engine X”&#xff09;是异步框…

避免“文献综抄”,5种写作结构助你完成文献综述→

很多作者可能有过这样的体验&#xff1a;读了很多文献&#xff0c;但在写综述的时候总感觉不像是在写文献综述&#xff0c;更像在写文献总结 如果引用方面不注意&#xff0c;甚至会成为文献综抄。 那么&#xff0c;你可以参考下我们整理的以下资料哦~ 01 文献总结和文献综述的…

DCDC反馈电阻的阻值如何取值?

DCDC芯片的反馈电阻 下图为我们公司现在常用的两款DCDC芯片&#xff0c;TPS54335ADDA/TI和LMR14050SDDA/TI。 其中RFBT和RFBB都是反馈电阻&#xff0c;可以通过调节这两个电阻的比值来输出 预期电压。 FBT&#xff1a;feedback top&a…

保姆级丨XAMPP安装使用

0x00 前言 XAMPP 是一个完全免费&#xff0c;易于安装的 Apache 发行版&#xff0c;包含 MariaDB &#xff0c; PHP 和 Perl 。 XAMPP 开源软件包已经设置为非常容易安装和使用。 0x01 环境说明 Windows 11xampp-windows-x64-8.2.4-0-VS16-installer 0x02 准备工作 首先要访问…

数据库分区;pgAdmin操作pgsql分区;修改pgsql数据库名字

目录 分区 什么是分区 分区的优势 pgAdmin操作pgsql分区 创建父表 创建分区 数据入库分区 扩展&#xff08;按天创建分区脚本&#xff09; 修改数据库名字 链接 分区 什么是分区 指将一个大的表或索引分成多个小的、独立的部分&#xff0c;每个部分称为一个分区&#x…

带你了解家居智能的心脏:物联网关

本文将介绍家庭物联网关的相关内容&#xff0c;将明白物联网关在家庭这个场景当中的应用。现在市面上各种各样的智能家居的家电或者其他设备非常多&#xff0c;那么这就需要一个智能的设备去对所有的家电进行管控。这样一个设备就是家庭智能网关&#xff0c;家庭物联网关是家居…

Py之onnx:onnx/onnxruntime库的简介、安装、使用方法之详细攻略

Py之onnx&#xff1a;onnx/onnxruntime库的简介、安装、使用方法之详细攻略 目录 onnx/onnxruntime库的简介 onnx/onnxruntime库的安装 onnx/onnxruntime库的使用方法 1、基础用法 onnx/onnxruntime库的简介 Open Neural Network Exchange&#xff08;ONNX&#xff09;是一…

Python每日一练(20230513) 粉刷房子 I\II\III Paint House

目录 1. 粉刷房子 Paint House 2. 粉刷房子 II Paint House-ii 3. 粉刷房子 III Paint House-iii &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 leetcode题号分别为&#xff1a; 256、2…