python aiohttp异步协程实现同时执行多条请求
我们在对多个链接进行处理的时候,往往是先请求一个链接获得数据后,再请求第二个。
中间在等待返回数据时候,存在一个空闲时间,脚本啥都没干。
用aiohttp异步协程的方法,创建多条任务发送请求(理论上不是多任务,可以理解为前一个请求发送后不等待结果就发送第二条请求)
这里引用的是别人的案例,对异步协程过程已经进行封装,主要脚本名字“xiuren.py”
# coding=utf-8 import aiohttp
import asyncio class xiuren:
def __init__(self, urls):
self.urls = urls
self.browser_header = {
'cookie': 'ASPSESSIONIDASQAASCA=DFGGEPNAAJKPIAGBHOKMFNEA; cfstatshowcookie=xiurenji',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.54'} async def get_data(self, url):
async with aiohttp.ClientSession() as session: # 等价于request
async with session.get(url=url, headers=self.browser_header) as resp: # 等价于resp=request.get()
return [url, await resp.content.read()] # 返回数据 async def main(self):
tasks = [asyncio.create_task(self.get_data(url)) for url in self.urls] # 创建任务列表
await asyncio.wait(tasks) # 执行并发任务
return [i.result() for i in tasks] # 返回数据 def run(self):
loop = asyncio.get_event_loop()
return loop.run_until_complete(self.main()) # 返回数据
请求链接的脚本
from xiuren import xiuren urls = [
"https://www.qq.com",
'https://www.baidu.com',
'https://www.sina.com.cn',
'https://www.avvdc.com',
'https://www.163.com'
] for i in xiuren(urls=urls).run():
print(i)
接下来就是请求后数据的获取,关键点在这一段, 将决定你输出的内容
return ['status',resp.status] # 返回请求后的状态码
return ['headers',resp.headers] # 返回请求后的响应头
return ['body',await resp.text()] # 返回请求后的响应体
return ['bytes',await resp.read()] # 返回请求后的响应体二进制内容
return ['json',await resp.json()] # 返回请求后的响应体二进制内容
返回数据后,然后对数据进行处理提取就可以了,print这一步处理数据
aiohttp还可以对脚本设置参数,比如请求数据,设置超时时间等,详细就直接贴地址参考了
https://www.cnblogs.com/jiba/p/16672319.html
https://www.cnblogs.com/XiaoYang-sir/p/16217721.html
python aiohttp异步协程实现同时执行多条请求的更多相关文章
- Python中异步协程的使用方法介绍
1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后 ...
- 异步协程asyncio+aiohttp
aiohttp中文文档 1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序 ...
- python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用
python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用 一丶单线程+多任务的异步协程 特殊函数 # 如果一个函数的定义被async修饰后,则该函数就是一个特殊的函数 async ...
- Python爬虫进阶 | 异步协程
一.背景 之前爬虫使用的是requests+多线程/多进程,后来随着前几天的深入了解,才发现,对于爬虫来说,真正的瓶颈并不是CPU的处理速度,而是对于网页抓取时候的往返时间,因为如果采用request ...
- 消息/事件, 同步/异步/协程, 并发/并行 协程与状态机 ——从python asyncio引发的集中学习
我比较笨,只看用await asyncio.sleep(x)实现的例子,看再多,也还是不会. 已经在unity3d里用过coroutine了,也知道是“你执行一下,主动让出权限:我执行一下,主动让出权 ...
- python协程与异步协程
在前面几个博客中我们一一对应解决了消费者消费的速度跟不上生产者,浪费我们大量的时间去等待的问题,在这里,针对业务逻辑比较耗时间的问题,我们还有除了多进程之外更优的解决方式,那就是协程和异步协程.在引入 ...
- python爬虫--多任务异步协程, 快点,在快点......
多任务异步协程asyncio 特殊函数: - 就是async关键字修饰的一个函数的定义 - 特殊之处: - 特殊函数被调用后会返回一个协程对象 - 特殊函数调用后内部的程序语句没有被立即执行 - 协程 ...
- 第十一章:Python高级编程-协程和异步IO
第十一章:Python高级编程-协程和异步IO Python3高级核心技术97讲 笔记 目录 第十一章:Python高级编程-协程和异步IO 11.1 并发.并行.同步.异步.阻塞.非阻塞 11.2 ...
- Python异步协程(asyncio详解)
续上篇讲解yield from博客,上篇链接:https://www.cnblogs.com/Red-Sun/p/16889182.html PS:本博客是个人笔记分享,不需要扫码加群或必须关注什么的 ...
- [转载]Python 3.5 协程究竟是个啥
http://blog.rainy.im/2016/03/10/how-the-heck-does-async-await-work-in-python-3-5/ [译] Python 3.5 协程究 ...
随机推荐
- FastReport如实现打印固定行数,不足补打空白行(转)
看了网上的一些资料,发现了方法,但是描述都不是很详细,也至于每次都无法实现,只能在数据集中做补空行处理.今天终于弄通了,贴出方法,以备后续之用. 1. <1>在报表上加一个Child(在控 ...
- java中的ArrayBlockingQueue
ArrayBlockingQueue ArrayBlockingQueue 是 Java 并发包 (java.util.concurrent) 中的一个线程安全的阻塞队列实现. 它基于数组实现,容量固 ...
- 个人数据保全计划:部署joplin server笔记同步服务
前言 在这个数据爆炸的时代,个人数据的价值愈发凸显,成为我们生活与工作中无可替代的重要资产.上一篇文章里,我介绍了从印象笔记迁移至 Joplin 的过程,这是我寻求数据自主掌控的关键一步.在探索同步方 ...
- .NET中优雅使用Patch: JsonPatch
引言 在现代 Web API 开发中,我们经常需要对资源进行部分更新(Partial Update).传统的 PUT 请求会要求发送整个对象,而 PATCH 请求可以仅发送需要更新的字段.ASP.NE ...
- VXLAN 网络中报文转发过程
本文分享自天翼云开发者社区<VXLAN 网络中报文转发过程>,作者:刘****林 以同网段的 VM 间互通简单介绍 VXLAN 网络中的报文转发过程. 1.VM1 发送目的地址为 VM2 ...
- 五分钟搭建属于你的AI助手:Ollama+DeepSeek+AnythingLLM深度整合教程
作者简介 微信公众号:密码应用技术实战 博客园首页:https://www.cnblogs.com/informatics/ GitHub地址:https://github.com/warm3snow ...
- Iceberg参数调整
1.读取参数介绍 属性 默认值 描述 read.split.target-size 134217728 (128 MB) 组合数据输入分割时的目标大小 read.split.metadata- ...
- 支付宝AES如何加密
继之前给大家介绍了 V3 加密解密的方法之后,今天给大家介绍下支付宝的 AES 加密. 注意:以下说明均在使用支付宝 SDK 集成的基础上,未使用支付宝 SDK 的小伙伴要使用的话老老实实从 AES ...
- C# TorchSharp 图像分类实战:VGG大规模图像识别的超深度卷积网络
目录 图像分类 | VGG大规模图像识别的超深度卷积网络 数据集 直接下载 opendatalab 数据集社区 自定义数据集 模型训练 教程名称:使用 C# 入门深度学习 作者:痴者工良 教程地址: ...
- led色块是什么,bin指值是什么
色块其实就是色温的区域范围. LED的色温按标准是分段的, 既然是分段,就有一个最大值和最小值,在色坐标系中是一个,X和Y的坐标对应的也就有一个最大值和最小值,这样一个色温段就是以小块的区域,即所谓的 ...