Автоматика - это хорошо, если вы точно знаете, где поставить машину. - Элиягу Голдратт

MechanicalSoup - это библиотека Python, которая помогает автоматизировать взаимодействие с веб-сайтами. Пакет Python MechanicalSoup автоматически сохраняет и отправляет файлы cookie, следует перенаправлениям, а также может переходить по ссылкам и отправлять формы на веб-странице. MechanicalSoup был создан M Hickford, который был постоянным пользователем библиотеки Mechanize. К сожалению, Mechanize несовместим с Python 3, и его разработка застопорилась на несколько лет. MechanicalSoup предоставляет аналогичный API, основанный на запросах гигантов Python (для сеансов http) и BeautifulSoup (для навигации по документам).

MechanicalSoup предназначен для моделирования поведения человека с помощью веб-браузера. Возможный вариант использования:

  • Взаимодействие с веб-сайтом, который не предоставляет API веб-сервисов, из браузера.
  • Тестирование веб-сайта, который вы разрабатываете

Установка

Пакет Python MechanicalSoup можно установить с помощью следующей команды pip.

pip install MechanicalSoup

MechanicalSoup - API-документация

StatefulBrowser

Это расширение Browser, которое хранит состояние браузера и предоставляет множество удобных функций для взаимодействия с элементами HTML. Это основной инструмент в MechanicalSoup для взаимодействия с веб-сайтами. Полный список переданных параметров можно найти здесь.

class mechanicalsoup.StatefulBrowser(*args, **kwargs)

Браузер

Этот API браузера создает браузер низкого уровня. Также рекомендуется использовать StatefulBrowser для большинства приложений, поскольку он предлагает более продвинутые функции и удобства, чем API браузера. Полный список переданных параметров можно найти здесь.

class mechanicalsoup.Browser(session=None, soup_config={'features': 'lxml'}, requests_adapters=None, raise_on_404=False, user_agent=None)

Форма

API Form помогает в построении заполняемой формы. Класс Form отвечает за подготовку HTML-форм для отправки. Он обрабатывает следующие типы элементов: ввод (текст, флажок, радио), выбор и текстовое поле. Полный список переданных параметров можно найти здесь.

class mechanicalsoup.Form(form)

Исключения

API Исключения используется для создания исключений, когда Mechanicalsoup что-то не может найти. Это происходит в таких ситуациях, как (неполный список):

  • find_link() вызывается, но ссылка не найдена.
  • Браузер был настроен с помощью raise_on_404 = True, и при просмотре выдается ошибка 404.
  • Пользователь попытался заполнить поле, которого нет в форме (например, browser [«name»] = «val», где браузер является StatefulBrowser).
exception mechanicalsoup.LinkNotFoundError
exception mechanicalsoup.InvalidFormMethod

MechanicalSoup по сравнению с другими альтернативами

Существуют и другие библиотеки с тем же назначением, что и MechanicalSoup.

  • Mechanize является предком MechanicalSoup (получившего свое название от Perl-модуля Mechanize). Это был отличный инструмент, но он не поддерживался в течение нескольких лет и не поддерживал Python 3.
  • RoboBrowser очень похож на MechanicalSoup. Обе небольшие библиотеки, построенные на основе запросов и BeautifulSoup. Их API очень похожи. У обоих есть автоматизированный набор тестов.
  • Selenium - гораздо более тяжелое решение: оно запускает настоящий веб-браузер (Firefox, Chrome,…) и управляет им с помощью межпроцессного взаимодействия. Selenium - правильное решение, если вы хотите проверить правильность работы веб-сайта с различными браузерами (например, совместим ли код JavaScript, который вы пишете, со всеми основными браузерами на рынке?), И, как правило, он полезен, когда вам нужна поддержка JavaScript.

Последние мысли

С помощью MechanicalSoup легче автоматизировать поведение человека с помощью веб-браузера. Он активно поддерживается разработчиком и, следовательно, очень полезен по сравнению с другими библиотеками, созданными для тех же целей. Ниже приведены некоторые из случаев, в которых использование MechanicalSoup невозможно.

  • Если веб-сайт предоставляет API веб-сервисов (например, REST), вам следует использовать этот API, и вам не потребуется MechanicalSoup.
  • Если веб-сайт, с которым вы взаимодействуете, не содержит HTML-страниц, то MechanicalSoup не принесет ничего по сравнению с запросами, поэтому просто используйте запросы.
  • Если веб-сайт использует JavaScript, вам, вероятно, понадобится полноценный браузер. Selenium может вам в этом помочь, но это гораздо более тяжелое решение, чем MechanicalSoup.
  • Если веб-сайт специально разработан для взаимодействия с людьми, пожалуйста, не идите против воли владельца веб-сайта.

Дальнейшие ссылки

Архив новостей:

Проекты с использованием MechanicalSoup

«Автоматизация, применяемая к неэффективной операции, увеличит неэффективность». - Билл Гейтс.