爬虫之异步爬虫asyncio

与异步爬虫的相见

文章目录

一、asynico是什么?

简言之,就是用这个库可以来实现异步IO

二、使用步骤

1,普通用法

1,下面我们来看一个案例:

import asyncio
async def sex(x):
    print(x)
name=sex('男生')
print(name)    #打印出来为一个协程对象,而不是像以前一样打印内容(先不执行)
print('上面是一个协程对象')
#看英文意思我们就可以知道,get_event_loop得到一个事 件循环,也即所有含async的等待列表
loop=asyncio.get_event_loop()
#下面这个意思就是逐步执行loop里面所等待的内容 ,sex函数也在事件循环里面,所以下面才会执行   
loop.run_until_complete(name) 

#asynico.run(name)这个是等价于上面两行的

打印结果如下:

 

2,在爬虫里面的用法

asynico模块就是支持异步IO的,是在Python3.4之后才有的模块,功能相当强大,但是目前它不支持发送http请求,只支持tcp请求,如果要发送http请求,就要自己再tcp基础之上封装自己的http请求,当然这啃不动不用我们自己写啊,谁叫我们用了Python呢,早就有人为我们封装了这个模块,那就是aiohttp,我们直接用就好了。

这告诉我们----要想异步url,需要使用aiohttp

代码如下:

import time,asyncio,aiohttp  #导入库
start=time.time()
async def get_url(url):
    session=aiohttp.ClientSession()  #确定clien对象
    res=await session.get(url)       #异步等待
    await res.text()
    await session.close()
    return res
async def request():
    url='https://www.httpbin.org/delay/5'  #该网站爬取十次不用异步需要六十秒
    res=await get_url(url)
tasks=[asyncio.ensure_future(request()) for i in range(10)]  #列表解析式
loop=asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
end=time.time()
print(end-start)

下面是运行结果:


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小飞努力学习~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值