Автоматика - это хорошо, если вы точно знаете, где поставить машину. - Элиягу Голдратт
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).
exceptionmechanicalsoup.LinkNotFoundError
exceptionmechanicalsoup.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
- Инструменты Чамило
- Gmusicapi: неофициальный API для Google Play Music.
- PatZilla: исследование патентной информации для человека
«Автоматизация, применяемая к неэффективной операции, увеличит неэффективность». - Билл Гейтс.