首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python3异步爬虫 ——aiohttp模板使用

python3异步爬虫 ——aiohttp模板使用

作者头像
小小咸鱼YwY
发布于 2020-10-27 09:30:55
发布于 2020-10-27 09:30:55
1.4K00
代码可运行
举报
文章被收录于专栏:python-爬虫python-爬虫
运行总次数:0
代码可运行

一.简单使用和讲解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import aiohttp
import asyncio

async def fetch(client):
    async with client.get('http://httpbin.org/get') as resp:
        assert resp.status == 200
        return await resp.text()


async def main():
    async with aiohttp.ClientSession() as client:
        html = await fetch(client)
        print(html)

loop = asyncio.get_event_loop()     #返回一个事件循环对象,是asyncio.Baseeventloop的实例

for i in range(30):
    task = loop.create_task(main())     #添加任务

loop.run_until_complete(main())    #运行直至main()运行完

二.asyncio模块(事件相关)

Column

Column

Asyncio.get_event_loop()

返回一个事件循环对象,是asyncio.Baseeventloop的实例

Abstracteventloop.stop()

停止运行事件循环

Abstracteventloop.run_forever()

一直运行直到stop()

Abstracteventloop.run_until_complete(func())

运行直至func对象运行完

Abstracteventloop.close()

关闭事件循环

Abstracteventloop.is_running()

返回事件循环的是否运行

Abstracteventloop.create_task(func())

添加事件

三.asyncio模块回调(部分代码)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
loop = asyncio.get_event_loop()     #返回一个事件循环对象,是asyncio.Baseeventloop的实例
task = loop.create_task(main())   
task.add_done_callback(callback)   #上面的mian方法的返回值为下面callback方法名所用方法的入参

四.aiohttp请求相关

1.发起请求

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import aiohttp
import asyncio


async def request_get(url):
    async with aiohttp.ClientSession() as client:  # 创建
        async with client.get(url) as resp:
            assert resp.status == 200  # 如果状态码是200才往下走,不然抛异常
            print( await resp.text())


loop = asyncio.get_event_loop()
loop.run_until_complete(request_get("http://httpbin.org/get"))

2.添加请求头,params,cookies,代理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
和reuqest模块类似直接加就可以了
#设置代理
 session.get("http://python.org",proxy="http://some.proxy.com")

3.自定义域名解析地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#我们可以指定域名服务器的 IP 对我们提供的get或post的url进行解析
from aiohttp.resolver import AsyncResolver
 
resolver = AsyncResolver(nameservers=["8.8.8.8", "8.8.4.4"])
conn = aiohttp.TCPConnector(resolver=resolver)

4.控制同时连接的数量(连接池)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
async def func1():
 cookies = {'my_cookie': "my_value"}
 conn = aiohttp.TCPConnector(limit=2)  #默认1000表示无限
 async with aiohttp.ClientSession(cookies=cookies,connector=conn) as session:
    pass

五.aiohttp响应相关

1.获取网站的响应状态码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resp.status

2.获取网站的请求头

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
resp.headers 来查看响应头,得到的值类型是一个dict
resp.raw_headers  查看原生的响应头,字节类型
resp.history      查看重定向的响应头

3.获取网站的响应内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用text()方法
使用json()方法  json格式
使用read()方法,不进行编码,为字节形式
r.content.read(10)  获取二进制流前10 
注意:text(),read()方法是把整个响应体读入内存,如果你是获取大量的数据,请考虑使用”字节流“(StreamResponse)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python aiohttp_python aiohttp的使用详解
async with aiohttp.request(“GET”,url) as r:
全栈程序员站长
2022/11/17
2.1K0
python aiohttp_python aiohttp的使用详解
大型fastapi项目实战 高并发请求神器之aiohttp(上) [建议收藏]
在 Python 众多的 HTTP 客户端中,最有名的莫过于 requests、aiohttp 和 httpx。在不借助其他第三方库的情况下,requests 只能发送同步请求;aiohttp 只能发送异步请求;httpx 既能发送同步请求,又能发送异步请求。在并发量大的情况下,如何高效的处理数据,异步是我们的优选,今天我们主要详解的是在生产环境广泛使用的 aiohttp。
python编程从入门到实践
2021/02/04
11K1
大型fastapi项目实战 高并发请求神器之aiohttp(下)
1.先通过 event_loop = asyncio.get_event_loop() 创建了一个事件循环 2.通过 asyncio.gather 接受多个 future 或 coro 组成的列表 任务 3.通过 event_loop.run_until_complete(task) 我们 就开启 事件循环 直到这个任务执行结束。 4.async with aiohttp.ClientSession() as session: 是创建了一个异步的网络请求的上线文管理具柄 5.async with session.get('http://www.baidu.com') as resp: 异步请求数据 6.res = await resp.text() 异步的接收数据 再解释一下两个关键词 1.async 如果一个函数被这个async 关键词修饰 那这个函数就是一个 future object 2.await 协程对象执行到这个关键词定义之处就会做挂起操作,原理是与yield /yield from 类似的。
python编程从入门到实践
2021/03/03
3.5K0
大型fastapi项目实战 高并发请求神器之aiohttp(下)
python︱用asyncio、aiohttp实现异步及相关案例
Asyncio 是并发(concurrency)的一种方式。对 Python 来说,并发还可以通过线程(threading)和多进程(multiprocessing)来实现。Asyncio 并不能带来真正的并行(parallelism)。当然,因为 GIL(全局解释器锁)的存在,Python 的多线程也不能带来真正的并行。 .
悟乙己
2019/05/26
2.4K0
强大的异步爬虫 with aiohttp
看到现在网络上大多讲的都是requests、scrapy,却没有说到爬虫中的神器:aiohttp
小歪
2018/07/25
1.2K0
异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取
异步爬虫是指在进行数据抓取时能够实现异步IO操作的爬虫程序。传统的爬虫程序一般是同步阻塞的,即每次发送请求都需要等待响应返回后才能进行下一步操作,效率较低。而异步爬虫可以在发送请求后不阻塞等待响应,而是继续执行其他任务,从而提升了数据抓取效率。
小白学大数据
2024/06/08
3840
AIOHTTP的实战(一)
aiohttp是基于asyncio和Python的异步HTTP客户端以及服务器,在这里主要介绍aiohttp在客户端应用请求中的案例应用和案例实战。在使用前需要安装该第三方的库,安装的命令为:
无涯WuYa
2020/07/24
1.5K0
异步爬虫实践攻略:利用Python Aiohttp框架实现高效数据抓取
在当今信息爆炸的时代,数据是无处不在且变化迅速的。为了从海量数据中获取有用的信息,异步爬虫技术应运而生,成为许多数据挖掘和分析工作的利器。本文将介绍如何利用Python Aiohttp框架实现高效数据抓取,让我们在信息的海洋中快速捕捉所需数据。
小白学大数据
2024/03/21
3820
aiohttp 异步http请求-1.快速入门 get 请求示例
前言 在 python 的众多 http 请求库中,大家最熟悉的就是 requests 库了,requests 库上手非常容易,适合入门学习。 如果平常工作中对发请求不追求效率和并发的情况下,requests 完全可以满足大部分需求。但是想发大量的请求,比如几万个请求的时候,可能需要等待几个小时,requests 库就不能满足需求了。 初学者建议先学习requests 库,熟练掌握requests 库才能更好的学习 aiohttp 异步框架。 同步与异步 requests只能发送同步请求,aiohttp只能
上海-悠悠
2022/04/21
2.7K0
aiohttp 异步http请求-1.快速入门 get 请求示例
aiohttp 异步http请求-7.https请求报SSL问题
默认情况下, aiohttp对 HTTPS 协议使用严格检查。有些同学电脑上请求https请求可能会报ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED]
上海-悠悠
2022/04/26
4.4K0
aiohttp 异步http请求-9.ClientSession自定义请求头部
前言 ClientSession是所有客户端 API 操作的核心和主要入口点。会话包含 cookie 存储和连接池,因此 cookie 和连接在同一会话发送的 HTTP 请求之间共享。 自定义请求头部 如果您需要将 HTTP 标头添加到请求中,请将它们传递给 headers 参数。如在请求头部添加"Content-Type": "application/json" headers = { "Content-Type": "application/json" } 完整代码: imp
上海-悠悠
2022/04/27
2.6K0
aiohttp 异步http请求-6.ClientTimeout 整个会话超时
ClientTimeout 是设置整个会话的超时时间,默认情况下是300秒(5分钟)超时。
上海-悠悠
2022/04/26
5.1K0
aiohttp 异步http请求-6.ClientTimeout 整个会话超时
用aiohttp和uvloop实现一个高性能爬虫
asyncio于Python3.4引入标准库,增加了对异步I/O的支持,asyncio基于事件循环,可以轻松实现异步I/O操作。接下来,我们用基于asyncio的库实现一个高性能爬虫。
周小董
2019/03/25
9970
用aiohttp和uvloop实现一个高性能爬虫
优雅简单玩转python3异步并发
在python3之后,随着async/await引入,异步调用以全新而便捷的方式让人眼前一亮。
超级大猪
2023/01/30
1.2K0
aiohttp 异步http请求-3.异步批量下载图片
前言 当我们需要批量下载图片的时候,requests 库会比较慢,如果一个个下载,出现阻塞的时候,后面的都会阻塞卡住,假死状态。当然你用多线程也能提高效率。 这里介绍用aiohttp 异步批量下载图片 异步批量下载图片 话不多说,直接看代码 import aiohttp import asyncio from pathlib import Path async def down_img(session, url): """下载图片""" name = url.split('/')[-1]
上海-悠悠
2022/04/21
1.6K0
aiohttp 异步http请求-3.异步批量下载图片
不看官方文档,这个问题你可能会束手无策
在 Python 3.7版本开始,引入了新功能asyncio.run来快速运行一段异步代码。
青南
2020/03/13
4.2K0
aiohttp 异步http请求-12.aiohttp 请求生命周期(和requests库有什么不一样?)
前言 aiohttp 请求生命周期对比requests库使用的区别 aiohttp 客户端 API 当你第一次使用 aiohttp 时,你会注意到一个简单的 HTTP 请求不是一次执行的,而是最多三个步骤: async with aiohttp.ClientSession() as session: async with session.get('http://python.org') as response: print(await response.text()) 当来自其他库时
上海-悠悠
2022/05/10
1.6K0
Python技巧:如何提高爬虫速度?
程序提速这个问题其实解决方案就摆在那里,要么通过并发来提高单位时间内处理的工作量,要么从程序本身去找提效点,比如爬取的数据用gzip传输、提高处理数据的速度等。
程序员小二
2021/12/30
1.1K0
Python技巧:如何提高爬虫速度?
Python中日志异步发送到远程服务器
背景 在Python中使用日志最常用的方式就是在控制台和文件中输出日志了,logging模块也很好的提供的相应 的类,使用起来也非常方便,但是有时我们可能会有一些需求,如还需要将日志发送到远端,或者直
CeshirenTester
2022/06/09
4840
Python网络请求-aiohttp
在 Python 众多的 HTTP 客户端中,最有名的莫过于requests、aiohttp和httpx。
码客说
2021/11/29
1.4K0
相关推荐
python aiohttp_python aiohttp的使用详解
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验