我正在尝试抓取新闻网站。整个任务可以分为以下几个任务:
显然,第一步的初始化查询在任何情况下都会阻塞,但是如何并发执行所有后续此类查询并再次从接收到的新闻 URL 组成 asyncio.tasks?也就是说,在抓取新闻文章时异步执行第一步,并从协程中获取正确的值(urls、data_next;见下文)。下面的代码是目前的情况,第一步是使用阻塞调用执行的。
tasks = []
async with aiohttp.ClientSession() as session:
urls, data_next = get_urls(TAG_URL.format('economy'))
while condition:
for url in urls:
task = asyncio.create_task(parse_page(url, session, f))
tasks.append(task)
await asyncio.gather(*tasks)
urls, data_next = get_urls(data_next)