requests大家应该都不陌生是,urllib和urllib2的改进版,我们做爬虫的时候经常要用到这个第三方库来请求网页并且获取网页内容
但是requests的方法有个不好的就是不能等待,也就是说无法放在await后面,因此无法使用requests库在协程程序中实现请求
因此就出现了aiohttp用来实现异步网页请求,可以理解为异步版本的requests
基本用法
官方推荐使用ClientSession()函数来调用网页请求等相关方法
首先,我们在协程中使用ClientSession()的get()或者request()方法来请求网页
requests的使用:
import requests
def hello(url):
resp = requests.get(url)
return resp.text()
url = "http://www.baidu.com"
print(hello(url))
使用aiohttp实现:
from aiohttp import ClientSession
async def hello(url):
async with ClientSession() as session:
async with session.get(url) as resp:
print(resp.status)
resp = await resp.text()
print(resp)
loop = asyncio.get_event_loop()
url = "http://baidu.com"
loop.run_until_complete(hello(url))
- 使用async和await关键字将函数异步化
- 使用ClientSession作为接口发出请求。ClientSession允许在多个请求之间保存cookie。会话(session)在使用完毕后需要显式关闭,类似于关闭文件,关闭Session也是一个异步的,需要直接用async with(异步上下文),也就是with的异步化
- 建立客户端sessi