当我使用 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
简单的答案是是。有必要将响应的处理(即使用 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 对象或其数据的风险,这可能会导致意外问题,尤其是响应较大或发生异常时。
因此,您应该始终选择第一个选项。