@d_biryukovv

Как реализовать асинхронный парсинг новостного сайта?

Я занимаюсь парсингом новостного сайта. Всю работу можно разбить на следующие задачи:
1) GET-запрос и получение ответа в виде html-документа, содержащего ссылки на новостные статьи, а также URL на следующий подобный документ (напоминает односвязный список);
2) запрос и распаршивание каждой из новостных статей;
3) возврат к первому шагу, но уже с запросом по полученному ранее URL.
Понятно, что инициализирующий запрос из первого шага в любом случае будет блокирующим, но как конкурентно реализовать все последующие такие запросы и снова собирать таски по полученным новостным URL-ам? То есть чтобы во время парсинга новостных статей асинхронно выполнялся первый шаг, с получением из корутины нужных значений (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)
  • Вопрос задан
  • 158 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы