[Python] BeautifulSoup — Парсим однотипные элементы веб-страниц

Привет! Основной мой профиль это Android и Unity. Kotlin и C# отличные ребята, но для автоматизации рутины идеалом оказался таки… Python. Не видел нигде столько библиотек для решения всего. Буквально. BeautifulSoup, PyGame, Flask, AIOGram (хотя это уже фреймворк для телеги, но не суть).

Вот задумал сделать простенькое приложение с чек листами жизни, раз они имеют спрос +-. И решил выкачать пару готовых. Два чек листа я знаю уже давно: первый и второй. Но не копировать же их руками! И тогда я вспомнил о BeautifulSoup и запустил PyCharm. А тут поделюсь ещё одним примером автоматизации сбора данных с веб-страничек.

Установка BS и остальное

Уже было в этой статье, повторяться не хочется: Учимся парсить веб-сайты на Python + BeautifulSoup

Приступаем

Начинаем с импорта необходимого и ссылки жертвы:

Далее загружаем страничку и закидываем в суп:

Как видим в инспекторе браузера (Ctrl + Shift + I), все данные удачно сложены в div с классом “check”:

Значит находим конкретно этот блок и отбросим лишнее:

На скрине видно, что каждый отдельный элемент содержит класс col-sm-12, а значит можно выбрать все дочерние элементы, которые содержат этот класс. В результате получаем все пункты, но в сыром виде.

Для своего приложения я решил использовать эмодзи, поэтому изображения меня не особо интересовали, а в самой карточке очень удачно оказался отдельный div с текстом. Он то нам и нужен!

Значит создаём цикл, где перебираем все карточки и вытаскиваем из них текст. Т.к. я это делал для приложения Android, то я сразу обернул это всё в подходящий формат строковых ресурсов:

И результат вот:

Буквально 5 минут и я получил готовые ресурсы для приложения. Ну не прекрасно ли?

Весь код вот:

Второй сайт

Как я и сказал, списка было два. Отличий будет не так много, а вернее всего одно, уже при финальной обработке карт.

Снова импорты, загружаем сайт:

Так же выбираем контейнер с карточками, в этот раз он называется “goals”. Тут же видим, что каждая карточка наследует класс “goal-wrapper”:

И наконец нас ждёт это самое отличие. Если в первом случае текст был удобно вынесен в отдельный блок, то тут текст является частью контента всей карточки:

Да ещё и иконки сразу в строке.

Но это не беда. Ведь теперь мы просто получаем напрямую text из самой карточки, а средствами питона отрезаем первое «слово» от строки. Я говорил, что использую эмодзи, но в строке они мне не нужны.

Всё, аналогичный первому результат получен, вы прекрасны!

Полный код второй части:

Оставьте комментарий

Прокрутить наверх