【发布时间】:2016-06-23 03:07:10
【问题描述】:
自从 Python 3.5 引入 async with 以来,docs 中为 aiohttp 推荐的语法已经改变。现在获取他们建议的单个网址:
import aiohttp
import asyncio
async def fetch(session, url):
with aiohttp.Timeout(10):
async with session.get(url) as response:
return await response.text()
if __name__ == '__main__':
loop = asyncio.get_event_loop()
with aiohttp.ClientSession(loop=loop) as session:
html = loop.run_until_complete(
fetch(session, 'http://python.org'))
print(html)
如何修改它以获取一组 url 而不是一个 url?
在旧的asyncio 示例中,您将设置一个任务列表,例如
tasks = [
fetch(session, 'http://cnn.com'),
fetch(session, 'http://google.com'),
fetch(session, 'http://twitter.com')
]
我尝试将这样的列表与上述方法结合起来,但失败了。
【问题讨论】:
-
你能解释一下你的失败吗?
-
@AndrewSvetlov 很高兴收到您的来信。我的意思是我不明白该怎么做。当我定义一个任务列表然后使用
results = loop.run_until_complete(tasks)时,我得到一个运行时错误。async with是一个新功能,文献很少,如果aiohttp文档显示了一个抓取多个 url 的示例,那么对于学习使用它的人来说会非常方便。图书馆看起来很棒,只需要一点手就可以开始。谢谢!
标签: python python-3.x web-scraping python-asyncio aiohttp