异步爬虫库aiohttp

本文介绍了如何利用Python的aiohttp模块进行异步请求,提高爬虫效率。通过封装异步函数和使用asyncio库创建任务,可以并发处理多个URL请求,获取网页文本内容。然而,文中提到对于异步解析库的选择,作者尚未找到合适方案。
摘要由CSDN通过智能技术生成

在已获得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.这里只请求到了数据,并未解析。至于异步的解析库,还没有找到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值