Быстро и просто автоматизируем парсинг данных с сайта на Python
Автор: Даниил Джепаров, Lead аналитик в «Сравни» и автор Telegram-канала @data_study
Всем привет! В этой статье расскажу как можно автоматизировать парсинг данных с сайта techcrunch.com с помощью инструмента Cloud Functions.
Для начала опишу в чем заключается проект.
1. Берем данные новостей с сайта techcrunch.com с помощью написанного парсера на Python
2. Загружаем полученные данные в таблицу в базу данных PostgreSQL
3. Автоматизируем 2 первых шага с помощью сервиса Cloud Functions в Яндекс Облаке по расписанию
Данный метод автоматизации позволит вам быстро и бесплатно автоматизировать ваш скрипт. В данном случае это сбор данных новостей, в вашем кейсе это может быть любая другая задача с запуском Python-кода по расписанию.
Пишем парсер
Предоставлю готовый кусок кода и опишу смысл каждой функции.
load_to_db(df) - функция подключения к базе данных postgres и загрузки входящего датафрейма df в таблицу внутри базы данных. В функции использзуются переменные окружения для подключения к базе данных. Укажите вместо них свои переменные от вашей базы данных, наппример можно создать базу данных также в облаке.
parse_techcrunch(url) - функция сбора данных с сайта techcrunch по указанному url. здесь используем библиотеку beautifulsoup чтобы достать данные из html разметки сайта, дальше преобразовать эти данные в вид pandas датафрейма (табличный вид).
main(event, context) - основная функция, которая внутри себя вызывает 2 остальные функции. Она нужна для того, чтобы именно эту функцию запускать в сервисе Cloud Functions. Входные параметры event и context указаны для использования инструмента триггеров, но в самой функции эти параметры не используются.
Автоматизируем в Cloud Functions
Используем сервис Cloud Functions в Яндекс Облаке. Можно конечно настроить автоматизацию по-другому, например настроить виртуальную машину, настроить cron-джобу для запуска скрипта, или вообще использовать другие инструменты, например Apache Airflow (но его тоже нужно самому настраивать на виртуальной машине).
В чем плюсы сервиса облачный функций в отличии от настройки виртуальной машины, cron-джобов и подобных решений:
+ не нужно арендовать виртуальную машину и платить за это
+ не нужно настраивать виртуальную машину и инструменты автоматизации на ней
+ тарификация Cloud Functions очень выгодная, для нашей задачи использования сервиса будет вообще бесплатным.
Как создавать Яндекс Облако я здесь расписывать не буду, описание будет с момента когда оно у вас уже появилось.
Создаем сервисный аккаунт для работу cloud функции
Создать его можно по инструкции. Обратите внимание, что сервисный аккаунт для работы с функциям должен иметь роли functions.mdbProxiesUser и functions.functionInvoker
Настраиваем Cloud функцию
Заходим в сервис Cloud Functions, создаем Python функцию и в редактор вставляем скрипт из этой статьи. Дополнительно создаем файле requirements.txt и указываем в нем для установки следующие библиотеки
Сохраняем все изменения в функции
Тестируем функцию
Для запуска функции нужно перейти во вкладку "Тестирование" и нажать "Запустить тест"
При успешном выполнении функции ниже в Результате тестирования состояние функции будет в статусе "Выполнена"
Настройка триггера для запуска функции по расписанию
В том же сервисе переходим в раздел Триггеры и создаем триггер со следующими параметрами
Теперь ваша функция будет запускаться каждый день в 10:15.
Заключение
Вы можете использовать эту статью как инструкцию для создания собственного проекта, меняя источник данных, дорабатывая сам код функции, меняя настройки триггера, добавляя новый функционал и т.д.
Кто хочет детально посмотреть этот проект и ход его реализации, можно посмотреть видео.
Если у вас возникнут вопросы, можете писать мне в телеграм @daniildzheparov
Автор: Даниил Джепаров, Lead аналитик в Сравни и автор телеграм-канала @data_study