python3异步爬虫 ——aiohttp模板使用
时间:2022-07-28
本文章向大家介绍python3异步爬虫 ——aiohttp模板使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一.简单使用和讲解
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模块回调(部分代码)
loop = asyncio.get_event_loop() #返回一个事件循环对象,是asyncio.Baseeventloop的实例
task = loop.create_task(main())
task.add_done_callback(callback) #上面的mian方法的返回值为下面callback方法名所用方法的入参
四.aiohttp请求相关
1.发起请求
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,代理
和reuqest模块类似直接加就可以了
#设置代理
session.get("http://python.org",proxy="http://some.proxy.com")
3.自定义域名解析地址
#我们可以指定域名服务器的 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.控制同时连接的数量(连接池)
async def func1():
cookies = {'my_cookie': "my_value"}
conn = aiohttp.TCPConnector(limit=2) #默认100,0表示无限
async with aiohttp.ClientSession(cookies=cookies,connector=conn) as session:
pass
五.aiohttp响应相关
1.获取网站的响应状态码
resp.status
2.获取网站的请求头
resp.headers 来查看响应头,得到的值类型是一个dict
resp.raw_headers 查看原生的响应头,字节类型
resp.history 查看重定向的响应头
3.获取网站的响应内容
使用text()方法
使用json()方法 json格式
使用read()方法,不进行编码,为字节形式
r.content.read(10) 获取二进制流前10
注意:text(),read()方法是把整个响应体读入内存,如果你是获取大量的数据,请考虑使用”字节流“(StreamResponse)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Java底层:GC相关
- Python 技术篇-pygame界面添加图片不显示,原因及解决办法
- SpringBoot集成Graylog
- Python 技术篇-pygame播放音乐没有声音,原因及解决办法
- Docker安装Graylog
- Spring Batch快速入门
- Python 技术篇-用PIL库修改图片尺寸
- 从行动上支持鸿蒙,HarmonyOS开发环境搭建快人一步
- 智能合约编程语言-solidity快速入门(下)
- Python 技术篇-用PIL库修改图片透明度,改变png图片色道为RGBA、RGB。
- 智能合约编程语言-solidity快速入门(上)
- Redis系列:项目中哪些常用的命令
- Chrome 插件编写-用几行js代码实现写入剪贴板功能
- Python 技术篇-socket套接字实现服务器客户端消息传递,UDP实现
- Python 技巧篇-如何避免python报错导致强制关闭窗口