如何使用aiohttp属性处理请求

问题描述 投票:0回答:1

当我使用 aiohttp 时,我发送这样的请求:

async with session.get(url=url, headers=headers) as res:
    src = await res.text()

之后我用 BeautifulSoup4 处理 html 代码。问题:请求处理有必要放在with块里面吗?所以我有2个选择。

第一:

async with session.get(url=url, headers=headers) as res:
    src = await res.text()
    soup = BeautifulSoup(src, "lxml")
    # handle further

第二:

async with session.get(url=url, headers=headers) as res:
    src = await res.text()
soup = BeautifulSoup(src, "lxml")
# handle further
python aiohttp
1个回答
0
投票

简单的答案是。有必要将响应的处理(即使用 BeautifulSoup 处理 HTML)保留在

async with
块内。

使用第一个选项,您将在

with
块内进行处理。

async with session.get(url=url, headers=headers) as res:
    src = await res.text()
    soup = BeautifulSoup(src, "lxml")
    # handle further

哪种方式更好,也是推荐的方式,因为它确保在连接仍然打开时处理响应。处理过程中的任何错误都将在连接关闭之前被捕获,从而实现更好的错误处理。

async with session.get(url=url, headers=headers) as res:
    src = await res.text()
soup = BeautifulSoup(src, "lxml")

使用第二个选项,这并不是真正推荐的方式,它可以让您稍微更清晰地分离关注点(获取响应与处理响应),但这种好处是微乎其微的。但是,连接关闭后存在访问 res 对象或其数据的风险,这可能会导致意外问题,尤其是响应较大或发生异常时。

因此,您应该始终选择第一个选项。

© www.soinside.com 2019 - 2024. All rights reserved.