@hacker_programer

Как корректно парсить страницу с подгрузкой JS?

Всем здравствуйте. Написал скрипт на Python, который парсит Яндекс месенджер (парсит популярные каналы: )
А именно:
1. Название канала
2. Описание канала
3. Ссылка на канал
4. Количество подписчиков
5. Дата последней публикации
6. Количество публикаций
7. Суммарное количество просмотров
8. Суммарное количество реакций
Эти даные он засовывает в гугл таблицу (скриншот прикрепил)
Подскажите пожалуйста, возникает проблема в скорости.
Она слишком быстрая, количество публикаций, суммарное количество просмотров и суммарное количество реакций просто не успевают где-то обнулиться (пока прокручивается вверх) и выводят слишком большие числа (хотя там на много меньше).
А иногда не успевает загрузиться js и выводится 0 подписчиков (хотя там не 0).
Сам скрипт я прикрепил, комментариями в коде попытался всё максимально подробно описать.
Скажите пожалуйста, что лучше всего сделать?
Где-то time.sleep(3) написать (но тогда программа будет парсить очень долго)
или быть может нужно где-то дождаться загрузки js?
P.S. так как длина вопроса не может быть боле 10к, убрал ту часть, где добавляются данные в таблицу. Сейчас они просто выведутся в PyCharm

Код:
Так как на хабре нельзя прикладывать файл блокнота и публиковать вопросы длиною больше 10к, 
то полный код можно скопировать здесь:

https://ru.stackoverflow.com/questions/1138040/%d0...

Вывод в таблице:
5edde82309142953102787.png
  • Вопрос задан
  • 220 просмотров
Пригласить эксперта
Ответы на вопрос 1
@b_a_y
Python, Selenium
Здравствуйте, советую заменить time.sleep на implicitly_wait. Позволит дернуть код дальше, в случае, если условие будет выполнено. Тем самым вы уйдете от статичных ожиданий. И код будет отрабатывать гораздо эффективнее.
Так же рекомендую сделать проверку на получение реквест кода на запрос (позволит избавиться от ошибок 404 и так далее..) в случае, когда у Вас нет данных, думаю сервисы яндекса распознают в вас бота и откидывают запросы.
Далее, перед тем как кикнуть драйвер, требуется сделать по любоуу тайм слип. driver.quit() - после него требуется поставить driver.close(). На гит хабе селениума уже были схожие проблемы - скрипты не корректно завершали свою работу без driver.quit(), driver.close(). Разработчики советовали использовать эти два метода в связке
Ответ написан
Ваш ответ на вопрос

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

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