aiohttp模块实现多任务异步协程实现异步爬虫

import asyncio
import time
import aiohttp
# 导入 aiohttp 模块, 使用该模块中的 ClientSession 类,实例化一个对象进行网络请求


urls = [
    'http://127.0.0.1:5000/bobo',
    'http://127.0.0.1:5000/haha',
    'http://127.0.0.1:5000/guagua'
]

async def get_page(url):
    print('正在请求:',url)
    # 实例一个session对象
    async with aiohttp.ClientSession() as session:
        # get()/post()
        # headers,params/data,proxy='http://ip:port'
        # 注意: 使用aiohttp时,用到的代理是字符串形式,而requests 是字典形式
        async with await session.get(url) as response:
            # text() 返回字符串形式的响应数据
            # read() 返回二进制形式的响应数据
            # json() 返回的就是json对象
            # 注意:获取响应数据操作之前一定要使用 await 进行手动挂起
            page_text = await response.text()
            print('请求完毕:',page_text)


    # print('下载完成!',response.text)

tasks = []  # 专门存放任务对象
stark_time = time.time()
for url in urls:
    c=get_page(url)   # 函数前面加上 async 就会返回一个协程对象,此时不会执行函数
    task = asyncio.ensure_future(c)  # 生成任务对象
    tasks.append(task)   # 将任务对象放进列表中


loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))

end_time = time.time()

print('总耗时:',end_time-stark_time)
打印结果:
正在请求: http://127.0.0.1:5000/bobo
正在请求: http://127.0.0.1:5000/haha
正在请求: http://127.0.0.1:5000/guagua
请求完毕: ok,guagua
请求完毕: ok,bobo
请求完毕: ok,haha
总耗时: 3.005218267440796

Process finished with exit code 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值