Bibliothek / SDK
MechanicalSoup/MechanicalSoup avatar
MechanicalSoup/MechanicalSoup

MechanicalSoup: Webautomatisierung in Python auf Basis von Requests und BeautifulSoup

Eine Python-Bibliothek zur Automatisierung der Interaktion mit Websites. MechanicalSoup bietet eine ähnliche API, die auf den Python-Giganten Requests __ (für HTTP-Sitzungen) und BeautifulSoup __ (für die Dokumentnavigation) basiert.

4.892 Sterne399 ForksPythonMIT

Auf einen Blick

Was ist das?
Die Bibliothek automatisiert die Interaktion mit Webseiten, verwaltet Cookies, folgt Weiterleitungen und reicht Formulare ab. Die klar markierte Grenze lautet: JavaScript führt sie nicht aus. Sie ist die Fortsetzung des Mechanize-Ansatzes auf dem Fundament von Requests und BeautifulSoup.
Für wen ist es gedacht?
MechanicalSoup passt für Schrott-Automatisierungen und Nutzer, die Formulare ausfüllen, Links verfolgen oder Cookies erhalten und senden wollen, ohne einen echten Browser zu steuern. Wer JavaScript-gerenderte Seiten abgreifen will, braucht eine Browser-Steuerung wie Playwright oder Selenium, denn genau diese Grenze ist dokumentiert.
Darf ich es kommerziell nutzen?
Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
Wird es noch gepflegt?
Ja. Die letzten Commits kamen vor 43 Tagen.
In welcher Sprache ist es geschrieben?
Hauptsächlich Python, laut der Sprachstatistik von GitHub.

Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 14. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.

TIEFGEHENDE OPEN-SOURCE-ANALYSE

Die Mechanize-Lücke und die Entstehung

MechanicalSoup wurde von M Hickford geschrieben, der die Bibliothek Mechanize nutzte. Mechanize war mit Python 3 über Jahre nicht kompatibel, ein verlinktes Issue blieb bis 2019 offen, und die Entwicklung der Vorlage stagnierte. MechanicalSoup bietet eine ähnliche API, setzt aber auf Requests für HTTP-Sitzungen und auf BeautifulSoup für die Navigation im Dokument.

Seit 2017 wird das Projekt laut README von einem kleinen Team gepflegt, zu dem @hemberger und @moy gehören. Die README nennt kein Erscheinungsdatum der ersten Version, der genaue Startzeitpunkt ist aus dieser Quelle nicht feststellbar. Für Teams, die Mechanize aus Python-2-Zeiten kannten, ist MechanicalSoup der naheliegende Nachfolger mit derselben Grundidee: ein zustandsbehafteter Browser, der über eine Programmier-API und nicht über einen separaten Browser-Prozess arbeitet.

Cookies, Weiterleitungen, Formulare und die JavaScript-Grenze

Drei Kernfunktionen nennt die README ausdrücklich: MechanicalSoup speichert und sendet Cookies automatisch, folgt Weiterleitungen und kann Links verfolgen sowie Formulare übermitteln. Genauso deutlich heißt es dort, dass die Bibliothek kein JavaScript ausführt. Diese Grenze ist der wichtigste Auswahlfaktor, denn keine API-Tricks ändern daran etwas, wenn die Zielseite ihre Inhalte im Browser erzeugt.

Das Design trennt die Ebenen klar: Requests übernimmt die HTTP-Sitzungsschicht, BeautifulSoup das Parsen und Auswählen von Elementen. Das Beispiel nutzt ein StatefulBrowser-Objekt, was auf eine persistente Sitzung mit Zustand hindeutet. Die Read-the-Docs-Dokumentation enthält eine automatisch generierte API-Referenz, in der sich die Klassenhierarchie nachschlagen lässt, während die README selbst nur den Ausschnitt aus dem Beispiel zeigt.

Installation: PyPI, Git-Checkout und lokaler Quellcode

Die README gibt drei Installationspfade vor. Die veröffentlichte Version installiert man mit pip install MechanicalSoup. Die Entwicklungsversion vom Hauptzweig folgt mit pip install git+https://github.com/MechanicalSoup/MechanicalSoup. Für einen lokalen Checkout genügt pip install . im Verzeichnis, wobei in allen Fällen --user ergänzt werden kann, um ins private Verzeichnis des aktuellen Benutzers zu installieren.

PyPy3 wird laut README unterstützt und getestet. Die exakte Liste der unterstützten Python-Versionen steht in der README nicht, sie liegt auf dem PyPI-Badge. Für Projekte, die bereits auf Requests und BeautifulSoup aufbauen, läuft die Bibliothek weitgehend ohne neue Betriebssystem-Abhängigkeiten, weil sie beide Pakete als Fundament wiederverwendet.

Ein komplettes Beispiel: die Qwant-Suche

Die README liefert ein ausführbares Skript aus examples/expl_qwant.py. Es erstellt einen StatefulBrowser mit user_agent='MechanicalSoup', öffnet https://lite.qwant.com/ und wählt das Suchformular über den CSS-Selektor #search-form aus. Im nächsten Schritt setzt es browser["q"] = "MechanicalSoup" und übermittelt das Formular mit submit_selected().

Danach iteriert das Skript über browser.page.select('.result a') und rekonstruiert die echte Ziel-URL aus den Redirect-Links von Qwant mit einem regulären Ausdruck auf das Muster /redirect/[^/]*/(.*). Der Ablauf zeigt das typische Muster der Bibliothek: öffnen, Formular auswählen, Feld befüllen, absenden und die Antwortseite mit BeautifulSoup parsen. Für komplexere Formulare mit Checkboxen, Radiobuttons und Textfeldern verweist die README auf tests/test_browser.py und tests/test_form.py.

Häufige Probleme, Pflege und Community

Für bekannte Stolperstellen gibt es in der Dokumentation ein FAQ, das die README verlinkt. Im Repository selbst liegen CONTRIBUTING.rst für Build, Tests und Beiträge sowie ein Gitter-Chat, dessen Nutzung und Aktivität die README nicht weiter beschreibt.

Der letzte dokumentierte Release im Quellenmaterial ist v1.4.0 vom 30. Mai 2025, davor erschienen v1.3.0 im Juli 2023 und v1.2.0 im September 2022. Der langsame Versionsrhythmus spricht für ein stabiles, wenig geändertes Paket. Die README integriert Abzeichen für Build-Status, Testabdeckung, Dokumentation und CII Best Practices, ohne dass die Werte dort ausgewiesen sind. Der Standardzweig heißt main, das Projekt ist nicht archiviert.

Die MIT-Lizenz und was sie für Einsatz bedeutet

MechanicalSoup steht unter der MIT-Lizenz. Sie erlaubt das Verwenden, Kopieren, Modifizieren, Merge, Veröffentlichen, Verteilen, Unterlizenzieren und Verkaufen von Kopien, sofern der Copyright-Hinweis mitgeführt wird. Die Software wird ohne Garantie bereitgestellt, und die Lizenz lehnt Haftung für Schäden ab, wie es bei der MIT-Kurzform üblich ist.

Für einen Einsatz in eigenen Produkten heißt das: Die Bibliothek kann in eigener Software ohne Quelloffenlegungspflichten verwendet werden, solange der Lizenzvermerk bleibt. Support, Sicherheitszusagen oder Wartungsverpflichtungen regelt die Lizenz nicht. Wer die Bibliothek in ein Produkt einbettet, sollte den Lizenzhinweis in den eigenen Vertriebsweg aufnehmen und den Versionsstand der Abhängigkeiten Requests und BeautifulSoup im Blick behalten.

Fazit: wann MechanicalSoup greift und wann nicht

Für automatisierte Login-Abläufe, Formularausfüllungen und das Sammeln von Listen aus klassisch gerenderten Seiten ist MechanicalSoup ein schlankes Werkzeug, das mit der etablierten Pipeline, die man aus Requests und BeautifulSoup kennt, auskommt. Die README eigene Beispiele zeigen mit der Qwant-Suche den gesamten Kreislauf, weshalb der Einstieg gering ist.

Die Grenze ist genauso deutlich: Sobald sich Seiten auf JavaScript verlassen, löst die Bibliothek die Aufgabe nicht. Dann führt kein Weg an einer Browser-Steuerung vorbei. Für ein Projekt gilt es vorab zu klären, ob die angestrebten Seiten serverseitig rendern und ob das jeweilige Tooling mit dem langsamen Release-Rhythmus und der MIT-Lizenz vereinbar ist. Wer eine ausgereifte, vorhersehbare API für reine HTTP-Automatisierung sucht, findet hier eine stabile Wahl.

Redaktionelles Fazit

MechanicalSoup passt für Schrott-Automatisierungen und Nutzer, die Formulare ausfüllen, Links verfolgen oder Cookies erhalten und senden wollen, ohne einen echten Browser zu steuern. Wer JavaScript-gerenderte Seiten abgreifen will, braucht eine Browser-Steuerung wie Playwright oder Selenium, denn genau diese Grenze ist dokumentiert. Vor dem Einsatz sollte geprüft werden, ob die Zielseiten server-seitig rendern, und die eigenen Python-Versionen gegen das PyPI-Badge abgeglichen werden.

Offizielle Quellen

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Community-Notizen

Community-Notizen