Python Web-Automatisierung: Sprache + Library

Status
Für weitere Antworten geschlossen.

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.252
Hi,

langer Weihnachtsurlaub steht an und ich möchte mein bisheriges Skript (loggt sich auf Webseiten ein und sucht einige Informationen zusammen) mal erneuern. Das bisherige Skript wurde vor Jahren in Ruby + Mechanize geschrieben und wird als Cronjob auf meinem Windows-Server ausgeführt. Damals war ich blutiger Anfänger - heute würde ich es gerne schöner lösen.

Am liebsten würde ich die neue Version im Python schreiben (damit wollte ich eh mal mehr machen)? Spricht das etwas dagegen?
Gibt es hier eine Art Standard/häufig genutzte Library für solches Web-Crawling?
Sehr hilfreich wäre es auch, wenn man irgendwie mit JavaScript-Inhalten umgehen könnte (oder vielleicht sogar mal einen Screenshot von einer der gecrawlten Seiten erstellen kann... Falls das überhaupt denkbar ist).
Zu guter Letzt wäre es noch ganz nett, wenn das Skript am Ende unter Linux und Windows laufen könnte.

Viele Fragen - ich weiß. Ich erhoffe mir einfach eine Antwort von jemandem mit Erfahrung, ob das der Weg ist, den ich nun Richtung Python gehen sollte.
 
Ich glaube es auch fast :)
Durch die Anbindung an einen Browser scheint halt wirklich alles zu gehen. Braucht sicher wesentlich mehr Resourcen, aber das ist es dann wert.
Werde mir das mal genauer ansehen.
 
Für einfache Sachen wie Auslesen: tagsoup. Mit Selenium WebDriver kann alles weitere erschlagen. Damit wird direkt auf den Browser zugegriffen, braucht deswegen mehr Ressourcen, aber selbst Screenshots von der ganzen Seite sind damit möglich.

Python:
from selenium import webdriver

url = 'https://www.computerbase.de/'
path = '/path/to/save/computerbase.png'

driver = webdriver.Chrome()
driver.get(url)
body = driver.find_element_by_tag_name('body')
body.screenshot(path)
driver.quit()
 
Also da ich ja auch einen Windows-Server laufen habe (und damit sowieso Unmegen Ressourcen verschwende^^), kann ich auch direkt Selenium nutzen. Dann bin ich für die Zukunft (JavaScript und so ein Zeugs) denke ich besser gewappnet. Ach ein Browsergame mit Grafik könnte man damit zum Spaß ja mal automatisieren. Wäre etwas schönes zum Lernen...

Ich hoffe ich finde heute Abend noch Zeit damit loszulegen. Besonders gespannt bin ich auch, ob ich dann via Python Shell und Browserfenster den Code wirklich Schritt für Schritt ausführen und testen kann. Da wäre ja in windeseile entwickelt...
 
@Hayda Ministral @Rossie Mittlerweile habe ich meine ersten Schritte mit Selenium gemacht. Macht wirklich richtig Spaß weil man die einzelnen Schritte auch mal mit offenem Browserfenster anschauen und so einfacher debuggen kann.
Problem: Anscheinend bekommen die Webseiten mit, dass man Selenium verwendet. Gibt zuhauf Berichte wo man dann als Bot erkannt wird. Habt ihr dazu Erfahrungen bzw. auch Ahnung wie man das umgeht? Habe natürlich auch Google gefragt - aber alle gefundenen Wege scheinen maximal kompliziert und es bleibt für mich unklar, ob diese Schritte nun wirklich ausreichen.

Ich habe damit nichts böses vor - aber einen Webseiten-Bann wollte ich dann schon umgehen.

@Innensechskant Danke, das sehe ich mir auch mal an. Wenn man sich mit Selenium aber etwas verstecken kann, dann wäre das für mich schon die präferierte Lösung (weil Klicki-Bunti)
 
User-Agent setzen scheint leider in der heutigen Zeit nicht genug.
Beispielsweise lässt sich ganz einfach via JavaScript (navigator.webdriver) prüfen, ob man da einen Webdriver für Automatisierung eingeschalten hat (was bei Selenium der Fall ist). Das konnte ich mittlerweile durch eine kleine JavaScript-Modifikation umgehen.
Außerdem scheint es noch einige vom Driver mitgebrachte JavaScript-Funktionen zu geben. Siehe Punkt 2 hier: https://piprogramming.org/articles/...Bot-Automation-from-Detection-0000000017.html
Leider konnte ich das beim Geckodriver für Firefox noch nicht finden...

Ist natürlich die Frage, wieviel Arbeit sich ein Webseitenersteller für die Detektion von Bots macht...
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben