@EnotShow

Python playwright, как работать с несколькими страницами асинхронно?

У меня стоит задача по асинхронному парсингу множества страниц, реализацию я писал используя playwright.

Я написал асинхронный итератор внутри которого открывается новая страница и выполняеться парсинг, но при запуске страници открываются всё так же поочередно и разницы вообще никакой не ощущается.

Что я делаю не так и может быть есть лучшее решение для этой задачи?

class AsyncIterator:
    def __init__(self, browser, list):
        self.browser = browser
        self.list = list
        self.end = len(list) - 1
        self.start = -1

    def __aiter__(self):
        return self

    async def __anext__(self):

        async def update(item, search):
            if item.title != search.resent_seen_title or not search.resent_seen_title:
                await update_resent_seen_db(search.id, item.title)
                return True

        if self.start < self.end:
            self.start += 1
            page = await self.browser.new_page()
            user: User = await get_user_db(self.list[self.start].creator_id)
            if user.membership_activate and user.membership_activate >= datetime.date.today() or int(
                    user.user_id) == MANAGER_ID:
                try:
                    item = await parse_item(page, self.list[self.start].search)
                    await page.close()
                    if await update(item, self.list[self.start]):
                        return item, self.list[self.start]
                    else:
                        return None, None
                except TimeoutError:
                    try:
                        item = await parse_item(page, self.list[self.start].search)
                        await page.close()
                        if await update(item, self.list[self.start]):
                            return item, self.list[self.start]
                        else:
                            return None, None
                    except:
                        return None, None
                except Exception as e:
                    return None, None
  • Вопрос задан
  • 278 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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