首页 > 其他分享 >爬虫 | 异步请求aiohttp模块

爬虫 | 异步请求aiohttp模块

时间:2024-06-16 14:44:21浏览次数:11  
标签:异步 aioreq aiohttp url await 爬虫 async

aiohttp模块,也就是async io http操作

# 1. 创建一个对象
aioreq = aiohttp.ClientSession() >>> 即对应异步的requests

# 2. 用这个异步requests来发送请求
resp = aioreq.get(url)

# 3. 异步写入文件,用到aiofiles模块,pip安装,可学习:https://www.w3cschool.cn/article/86236403.html

async with aiofiles.open(...) as f:
  await f.write()

"""需要注意的是,完成后需要close来释放资源,最好的办法是用with来帮助管理。
而异步中规定必须在with前面加上async,即 async with..."""

案例示范:

import asyncio
import aiohttp
import aiofiles

"""整体思路就是:
1. 异步发送请求
2. 异步保存信息
3. 异步写入文档
"""

async def download(url):

    """第一种写法是推荐写法,用async with来管理会话、清理资源"""
    # 1. 异步发送请求 >>> aiohttp.ClientSession() = 异步requests
    async with aiohttp.ClientSession() as aioreq:
        # # 2. 获得响应,保存信息
        async with aioreq.get(url) as resp:
            r_content = await resp.content.read()
            # # 3. 异步写入文件
            name = url.split('/')[-1]
            async with aiofiles.open(rf"F:\异步\{name}", mode="wb") as  f:
                await f.write(r_content)

        print(f'{name}', '完成')


    """第二种写法是手动关闭close,非常不推荐,需要手动关闭,有时候容易导致内存泄漏"""
    # # 1. 异步发送请求 >>> aiohttp.ClientSession() = requests
    # aioreq = aiohttp.ClientSession()
    # # 2. 获得响应,保存信息
    # resp = await aioreq.get(url)  # 异步挂起
    # r_content = await resp.content.read()
    # # 3. 异步写入文件
    # name = url.split('/')[-1]
    # async with aiofiles.open(rf"F:\异步\{name}", mode="wb") as f:
    #     await f.write(r_content)
    #
    # await resp.release()  >>> 文心一言说没有这种操作
    # await aioreq.close()


async def main():
    urls = [
        "https://i1.huishahe.com/uploads/tu/201911/9999/85c8311a57.jpg",
        "https://i1.huishahe.com/uploads/allimg/202205/9999/dd321482f1.jpg",
        "https://i1.huishahe.com/uploads/allimg/202205/9999/dd06ff32f2.jpg"
    ]

    tasks = []
    for url in urls:
        task = asyncio.create_task(download(url))
        tasks.append(task)

    await asyncio.wait(tasks)


if __name__ == "__main__":
    asyncio.run(main())

标签:异步,aioreq,aiohttp,url,await,爬虫,async
From: https://www.cnblogs.com/abloger/p/18249813

相关文章

  • python 小爬虫 DrissionPage+BeautifulSoup
    哈喽,大家好,我要开始写博客啦......
  • Flask 的异步用法案例
    Flask的异步用法案例。案例1:异步视图异步视图允许你使用asyncdef定义路由处理函数,这在处理I/O密集型任务时非常有用。fromflaskimportFlaskimportasyncioapp=Flask(__name__)@app.route('/async-data')asyncdefget_async_data():#模拟异步操作,例如......
  • Python爬虫案例:从某居网爬取房源信息
    网站链接:sjz.anjuke.com目标数据:位置、面积、价格、房源链接约束条件:房产价格在80-140w首先在浏览器上输入网址,通过鼠标右键-“检查”来确定各网页元素在html源代码中的位置和构成​通过检查导航的价格索引,找出了80-140w的房源信息的网页链接,url依次以13-15结尾并且其它数......
  • 批量异步上传aws图片脚本(python)
    背景工作中需要上传一些测试图片,于是网上找找资料(官方说明),前置步骤如下。python需要3.8以上,安装最新的boto3库:pipinstallboto3有一个S3权限的aws账户,得到访问密钥ACCESS_KEY与SECRET_KEY,以及上传图片的存储桶位置安装异步编程asyncio,aiohttp库,方便本地异步上传图片代码......
  • 游戏缓存与异步持久化的完美邂逅
    1、问题提出游戏服务器,需要频繁的读取玩家数据,同时也需求频发修改玩家数据,并持久化到数据库。为了提高游戏服务器的性能,我们应该怎么处理呢?2、应用程序缓存缓存,是指应用程序从数据库读取完数据之后,就将数据缓存在进程内存或第三方内存(例如redis)。游戏服务器对于玩家数据的读......
  • C# .NET Framework 4.0 异步
    .NETFramework4.0只能用Task.Factory.StartNew()4.0以上的则可以直接使用Task.Run()。Task.Factory.StartNew(()=>{})usingSystem;usingSystem.Threading;usingSystem.Threading.Tasks;usingMicrosoft.VisualStudio.TestTools.UnitTesting;namespacecom._80comm......
  • Es6中promise的解释用法以及何为同步异步、回调函数和回调地狱?
    一.什么是回调函数?        1.含义                ★回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在特定事件或条件发生时被调用执行。        2.回调函数在编程中扮演着重要的角色,主要用于以下场景:            ......
  • 爬虫相关面试题
    一,如何抓取一个网站?1,去百度和谷歌搜一下这个网站有没有分享要爬取数据的API2, 看看电脑网页有没有所需要的数据,写代码测试调查好不好拿,如果好拿直接开始爬取3,看看有没有电脑能打开的手机网页,一般格式为http://m.xxx.com或http://mobile.xxx.com, 有的话用F12检查抓一下包,......
  • python爬虫获取百度热搜
    注:本篇学习需要python基础前言:在上篇中,我们学习了怎么用python发送网页请求来获取网站的源代码,在这篇中,我们将进一步学习本篇目标:利用python爬虫获取百度热搜第一步,用浏览器打开百度热搜网站百度热搜网址https://top.baidu.com/board?tab=realtime页面如下:第二步,按下F12键......
  • python爬虫入门
    注:本篇需要python基础Python爬虫。相信大家对爬虫这个词都不陌生,那么什么是爬虫呢?简单来说,爬虫就是一只在网上爬行的虫子,它会根据我们设定的规则,自动地获取我们感兴趣的信息。而Python爬虫就是使用Python语言来编写这个虫子的程序。一、准备工作在开始编写Python爬虫之前,我们需......