https://mechanicalsoup.readthedocs.io/
Библиотека Python для автоматизации взаимодействия с веб-сайтами. MechanicalSoup автоматически сохраняет и отправляет файлы cookie, следует перенаправлениям, может переходить по ссылкам и отправлять формы. Он не поддерживает JavaScript.
MechanicalSoup был создан М. Хикфордом, который был активным пользователем библиотеки Mechanize. К сожалению, Mechanize был несовместим с Python 3 до 2019 года, и его разработка застопорилась на несколько лет. MechanicalSoup предоставляет аналогичный API, построенный на гигантах Python Requests (для HTTP-сессий) и BeautifulSoup (для навигации по документам). С 2017 года этот проект активно поддерживается небольшой командой, в которую входят @hemberger и @moy.
PyPy3 также поддерживается (и тестируется).
Загрузите и установите последнюю выпущенную версию с PyPI:
pip установить MechanicalSoup
Загрузите и установите версию для разработки с GitHub:
pip install git+https://github.com/MechanicalSoup/MechanicalSoup
Установка из исходников (устанавливает версию в текущий рабочий каталог):
установка python setup.py
(Во всех случаях добавьте --user
к команде install
, чтобы установить систему в домашний каталог текущего пользователя.)
Полная документация доступна на https://mechanicalsoup.readthedocs.io/. Возможно, вы захотите сразу перейти к автоматически созданной документации по API.
В примерах/expl_qwant.py приведен код для получения результатов поиска Qwant:
"""Пример использования MechanicalSoup для получения результатов из механизма поиска Qwants."""import reimport Mechanicalsoupimport htmlimport urllib.parse# Подключитесь к Qwantbrowser = Mechanicalsoup.StatefulBrowser(user_agent='MechanicalSoup')browser.open("https:// lite.qwant.com/")# Заполняем поиск formbrowser.select_form('#search-form')browser["q"] = "MechanicalSoup"browser.submit_selected()# Отображение результатов по ссылке в браузере.page.select('.result a'):# Qwant показывает ссылки перенаправления , а не фактический URL-адрес, поэтому извлеките# фактический URL-адрес из ссылки перенаправления:href = link.attrs['href']m = re.match(r"^/redirect/[^/]*/(.*)$", href)if m:href = urllib.parse.unquote(m.group(1))print(link.text, ' ->', href)
Дополнительные примеры доступны в файле example/.
Пример с более сложной формой (флажки, переключатели и текстовые области) можно найти в файлахtest/test_browser.py иtests/test_form.py.
Инструкции по созданию, тестированию и участию в MechanicalSoup: см. CONTRIBUTING.first.
Прочтите FAQ.