requests.get为同步,实现异步必须基于异步网络请求模块进行指定url的请求发送 === 》 aiohttp
pip3 install aiohttp
import asyncio
import time
import aiohttp
headers = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Mobile Safari/537.36'
}
#使用该模块的ClientSession进行网络请求发送
urls = ['https://v3.bootcss.com/getting-started/','https://v3.bootcss.com/getting-started/','https://v3.bootcss.com/getting-started/']
async def get_page(url):
async with aiohttp.ClientSession() as session:#得到session对象 固定语法 所有with前有async修饰
#发post请求 即async with await session.post(url) as response
#u-a伪装 async with await session.post(url,headers={xxxx}) as response
#参数处理 get==> params post ===> data,代理ip:proxy = 'xxxx'(字符串)
async with await session.get(url) as response: #得到相应对象,有耗时阻塞要await挂起
#注意 获取响应数据之前 一定要用await手动挂起
page_text = await response.text() #返回字符串形式二进制 read()为二进制 json()为json
print(page_text)
tasks = []
start = time.time()
for url in urls:
c = get_page(url)
task = asyncio.ensure_future(c)
tasks.append(task)
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
end = time.time()
print(end-start)
知识兔