在已获得url列表的情况下,异步请求这些url,则应用aiohttp模块而非requests
1.引入aiohttp模块:import aiohttp
2.异步使用aiohttp模块下的ClientSession()方法,命名为session,再异步使用session下的get/post方法请求url并命名为res(此处有阻塞,应加await挂起),as下的res后面不能直接跟.text(),所以后面再跟page_text=await res.text()(此处仍需挂起)(还能用
text()返回字符串形式的响应数据
read()返回二进制形式的响应数据
json()返回json对象),具体代码如下:
async with aiohttp.ClientSession() as session:
async with await session.get(url,headers=headers) as res:
page_text = await res.text()
这里等同于requests里的res = requests.get(url=url, headers=headers).text
3.将上述代码写在async def get_page(url):下封装成异步函数,利用协程asyncio库中创建task的方法,将异步函数写入task并制成列表(其中urls为需要请求的urls列表):
tasks = []
for url in urls:
c = get_page(url)
task = asyncio.ensure_future(c)
tasks.append(task)
4.创建一个循环池loop,将task列表注册到loop中执行:
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
执行结果就是异步打印出urls列表中所有url的请求结果
5.这里只请求到了数据,并未解析。至于异步的解析库,还没有找到。