Обзор

В моей предыдущей статье мы с вами рассказали, как использовать 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.)