Обзор
В моей предыдущей статье мы с вами рассказали, как использовать Python + requests + lxml
для извлечения биржевых данных. В этой статье давайте рассмотрим использование Robotic Process Automation (RPA) в среде Jupyter Notebook для выполнения парсинга веб-страниц. Лично я считаю Jupyter Notebook + RPA
отличным сочетанием, так как интерактивный характер Jupyter Notebook позволяет проводить быстрые итерации и пробы и ошибки при разработке роботов. Кроме того, еще одна хорошая вещь заключается в том, что все эти инструменты имеют открытый исходный код.
Я собираюсь использоватьxeus-robot
, ядро Jupyter для Robot Framework, основанное на собственной реализации протокола Jupyter xeus.
Настраивать
xeus-робот
Я предположил, что у вас уже установлена JupyterLab версии 3.0 и выше. Чтобы установить xeus-robot и его зависимости, просто следуйте инструкциям и выполните следующие команды.
$ conda install -c conda-forge xeus-robot
xeus-robot зависит от Robot Framework, которая представляет собой общую среду автоматизации с открытым исходным кодом для приемочного тестирования, разработки, управляемой приемочным тестированием (ATDD) и роботизированной автоматизации процессов (RPA).
SeleniumLibrary
Поскольку я собираюсь выполнять веб-скрапинг, мне нужно установить SeleniumLibrary из Robot Framework.
$ pip install --upgrade robotframework-seleniumlibrary
Драйверы браузера
Мне также нужно установить веб-драйвер на основе браузера, который я хочу автоматизировать. Я могу использовать webdrivermanager
для установки драйвера браузера. В этом случае я установил как для Firefox, так и для Chrome.
$ pip install webdrivermanager
$ webdrivermanager firefox chrome --linkpath /usr/local/bin
Обратите внимание, что я устанавливаю драйверы в /usr/local/bin
. Вы определенно можете установить их в другое место, но убедитесь, что это место находится в вашей среде PATH.
Когда настройка завершена, после запуска jupyter lab
я вижу вариант для RobotFramework (XRobot)
ноутбука.
Парсинг веб-страниц с использованием RPA
Давайте начнем с веселья, используя RPA для парсинга веб-страниц. Я собираюсь взять названия акций S&P500 с веб-сайта.
- Перейти на сайт
- В раскрывающемся списке выберите S&P 500.
- Подождите, пока страница обновится
- Сотрите названия акций и ссылки
- Сохраните информацию в плоском файле
Используя Robot Framework и блокнот Jupyter, вышеуказанные задачи легко реализовать всего за несколько строк кода.
Robot Framework в Jupyter Notebook
В отличие от использования языка программирования, Robot Framework имеет простой синтаксис, в котором используются удобочитаемые ключевые слова. Его возможности могут быть расширены библиотеками, реализованными на Python или Java. Фреймворк имеет богатую экосистему, состоящую из библиотек и инструментов, которые разрабатываются как отдельные проекты.
Как разработчику, вам может потребоваться изменить свое мышление, чтобы запрограммировать вариант использования, используя обычный английский язык.
Код
Настройки, переменные и ключевые слова
Начнем с определения настроек, переменных и ключевых слов. Список кодов вы можете найти ниже.
*** Settings *** Documentation Settings with reusable keywords and variables. ... ... The system specific keywords created here form our own ... domain specific language. They utilize keywords provided ... by the imported SeleniumLibrary. Library SeleniumLibrary Library OperatingSystem Library String *** Variables *** ${SERVER} https://www.investing.com ${BROWSER} Chrome ${STOCKS URL} ${SERVER}/equities/americas ${stocks_filter} xpath=//*[@id="stocksFilter"] ${stocks_to_grab} S&P 500 ${stock_link} //tr[starts-with(@id,'pair')]/td/a ${link_count} 0 *** Keywords *** Open Browser To Stocks Page Open Browser ${STOCKS URL} ${BROWSER} Save to File [Arguments] ${value1} ${value2} Append To File path=${EXECDIR}/stocks.txt content=${value1},${value2}
Настройки
Documentation
— это как комментарий, куда вы можете поместить описание ваших тестовых случаев.Library
используется для импорта модулей, которые я хочу использовать. Обратитесь здесь для всех доступных библиотек.OperatingSystem
иString
— это встроенные стандартные библиотеки.
Переменные
- Это раздел объявления переменных, где я перечисляю переменные, которые буду использовать. Для получения дополнительной информации обратитесь к руководству пользователя.
- Я использую XPath для получения данных, которые мне нужны. Если вы хотите узнать, как получить XPath с помощью Chrome, обратитесь к моей предыдущей статье.
Ключевые слова
Этот раздел позволяет вам определять пользовательские ключевые слова, используя предварительно определенные ключевые слова. Я определил 2 ключевых слова
Open Browser to Stock Page
открывает в браузере веб-страницу, с которой я хочу извлечь данные.Save to File
сохраняет полученную информацию в текстовый файл.
Используя Jupyter Notebook, вы можете проверить индивидуальное ключевое слово.
Тестовые случаи
Ниже приведен код для выполнения задачи по извлечению информации об акциях.
*** Test Cases *** Get All Stocks Open Browser to Stocks Page Maximize Browser Window Wait Until Element Is Visible ${stocks_filter} Select From List By Label ${stocks_filter} ${stocks_to_grab} Wait Until Element Is Visible xpath:${stock_link} ${link_count}= Get Element Count xpath:${stock_link} Log Many link_count ${link_count} Should Be True ${link_count} > 0 FOR ${index} IN RANGE 1 ${link_count}+1 ${link_text}= Get Text xpath:(${stock_link})[${index}] ${link_url}= Get Element Attribute xpath=(${stock_link})[${index}] href Log Many link_text ${link_text} Log Many link_url ${link_url} Save to File ${link_text} ${link_url} END Close All Browsers
Open Browser to Stocks Page
запускает браузер Chrome и переходит на сайт. Я определил Chrome как браузер, который я хочу использовать в разделе переменных. Вы определенно можете использовать другие браузеры, например. Fire Fox.Maximize Browser Window
максимизирует окно браузера.Wait until Element is Visible
ждет загрузки информации об акциях.Select From List by Label
выберите S&P 500 из раскрывающегося списка.Wait until Element is Visible
ждет загрузки данных S&P 500.Get Element Count
подсчитывает количество акций.Log Many
регистрирует информацию.Should be True
проверяет количество ссылок.For Loop
перебирает все ссылки, извлекает названия акций и URL-адреса и сохраняет их в текстовый файл.Close All Browsers
закрывает все браузеры.
Результаты
Отчет журнала
В целях отслеживания и отладки вы можете прочитать отчет журнала выполнения.
Нажмите кнопку Log
, и вы увидите отчет, подобный следующему.
Информация об удаленных запасах
Информация об очищенном запасе сохраняется в stocks.txt
в папке выполнения.
Резюме
Я лишь поверхностно коснулся возможностей Robot Framework, и вы можете исследовать гораздо больше возможностей самостоятельно. Как специалисты по данным или аналитики данных, xeus-robot
— это инструмент, который вы должны изучить, если ваши повседневные задачи связаны с веб-скрапингом или автоматизацией процессов.
Также проверьте RPA Framework на многие другие библиотеки с открытым исходным кодом, которые можно использовать для автоматизации процессов для всего, что вы можете себе представить.
Блокнот, которым я пользовался, можно найти в этом репозитории.
Также ознакомьтесь со следующими статьями.
использованная литература
Если вы еще не являетесь участником Medium и хотите им стать, нажмите здесь. (Часть вашей абонентской платы будет использована для поддержки alpha2phi.)