python爬虫之协程理解爬取照片的简单版

本文介绍了如何使用Python的异步库aiohttp和aiofiles实现高效的图片下载。通过创建协程和异步IO操作,避免了网络等待时间,提升了爬虫的效率。在main函数中,批量处理多个图片URL,展示了异步编程在爬虫中的应用,大大缩短了整体的执行时间。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

协程就是异步爬取 能够快速的爬取数据 高效利用CPU 当发生等待事件 就可以执行其他的任务

一、引入库

import asyncio
#import requests 正步代码 异步会被中断
import aiohttp
import aiofiles
import time

二、使用步骤

1.上代码

代码如下(示例):

import asyncio
#import requests 正步代码 异步会被中断
import aiohttp
import aiofiles
import time
async def download(url):  #用async返回函数可以当成是异步对象
    #url = "http://kr.shanghai-jiuxin.com/file/2020/1031/563337d07af599a9ea64e620729f367e.jpg"
    name = url.rsplit("/",1)[1]
    async with aiohttp.ClientSession() as session: #aiohttp.ClientSession() 等价于 requests
        async with session.get(url) as resp:#get请求的时候会花时间
             async with aiofiles.open(name,mode="wb") as f: #with能够操控文件管理 自动close()
                await f.write(await resp.content.read()) #resp.content.read()等价于resp.content
                #上面两个部分都需要等待 一个是写 一个是读取
    print(name,"搞定")
async def main():
    urls = ["http://kr.shanghai-jiuxin.com/file/2020/1031/563337d07af599a9ea64e620729f367e.jpg",
            "http://kr.shanghai-jiuxin.com/file/2020/1031/small191468637cab2f0206f7d1d9b175ac81.jpg",
            "http://kr.shanghai-jiuxin.com/file/2020/1031/smalld7de3f9faf1e0ecdea27b73139fc8d3a.jpg"]
    tasks = [] #存储异步对象
    for url in urls:
        tasks.append(asyncio.create_task(download(url)))
    await asyncio.wait(tasks)
if __name__ == '__main__':
    t1 = time.time()
    asyncio.run(main())
    t2 = time.time()
    print(t2-t1)#测试运行时间

该处使用的url网络请求的数据。


总结

需要注意的就是tasks里面的元素在继python3.8的时候 要记得用asyncio.creat_task(来获得元素) 不然会报错 图片的url的话 可以先用同步获取 异步也行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值