如何完全异步地抓取新闻网站?

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

我正在尝试抓取新闻网站。整个任务可以分为以下几个任务:

  1. GET-查询并以包含新闻文章链接的 html 文档形式获得响应,以及下一个类似文档的 URL(类似于单链表)。
  2. 查询和抓取每篇新闻文章。
  3. 返回到第一步,但查询我们之前获得的 URL。

显然,第一步的初始化查询在任何情况下都会阻塞,但是如何并发执行所有后续此类查询并再次从接收到的新闻 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)
python-asyncio aiohttp
© www.soinside.com 2019 - 2024. All rights reserved.