Sprache zum Webseiten auslesen/steuern ("Bot")

te one

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

ich bin auf der Suche nach der richtigen Programmiersprache um Webseiten anzusprechen, auszulesen, bestimmte Links "anzuklicken" (bzw. zumindest einen Request zu senden).
Zum Hintergrund: Mir geht es nicht um die Programmierung von illegalen Automatismen um mir z.B. Vorteile in Browsergames zu verschaffen (aber effektiv suche ich genau nach einer solchen Technik).
Ich bin selbst Webentwickler und habe mittlerweile eine eigene Seite zur Heimautomation, welche ich damit ansteuern möchte. Außerdem möchte ich gerne die ein- oder andere News-Seite auslesen umd mir aktuelle Nachrichten und Wetterdaten umformatiert anzeigen zu lassen.


Mal so ein kleines Schnippselchen, wie es grob schön wäre:
Code:
weather=http_request("wetter.de?area=12345"); //HTTP-Request mit GET-Parametern
echo extract_div(weather, "actual_weather") //In diesem Div steht z.B. "sonnig"

sensors=http_request("meineseite.de", "login=admin, pass=123"); //HTTP-Requests mit POST sollten möglich sein
//Stelle etwas mit den dort ausgelesen Daten an.

Bin mittlerweile durch einige Foren schon so auf den Weg von C# oder C++ gekommen. Was schlagt ihr vor?

Aktuell ist Erfahrung mit PHP, C und Java (lediglich etwas) vorhanden.
 
Die meisten Programmiersprachen können das Gewünschte. Empfehlen kann ich dafür Python. Damit hält man die Codebasis schön übersichtlich, da man hier meist weniger Zeilen hat; gerade was die Anforderung betrifft.
Weitere Stichworte:
- API
- JSON
- XML
 
Ich habe mir für mal sowas mit Mechanize in Ruby geschrieben. Das so ungefähr so aus:

agent = Mechanize.new
agent.user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:9.0.1) Gecko/20100101 Firefox/9.0.1'
page = agent.post(url, data)

Für Python wird es auch was geben. Alternativ Perl. Java oder C/C++ würde ich dafür definitiv nicht nehmen, nur eine Skriptsprache.
 
Python...Ein Graus...Das habe ich in meiner Übersicht der schon vorhandenen Programmiersprachen vergessen.
Aber komme ich damit auch um solche "Probleme" wie z.B. Sessionvariablen die nach dem Login angelegt werden? Kann mir das bei Python nicht wirklich vorstellen

JSON und XML sind mir bekannt. Hatte im Bereich von Javascript schon mehr damit zu tun.

Und API ist eben die frage welche Programmiersprache da etwas komfortables bietet. Glaube ich habe vor einiger Zeit schonmal so etwas kleines in C# entwickelt. Aber muss schon sehr lange her sein.


Mechanize schaut ganz gut aus. Davon habe ich während meiner Recherchen auch schon gelesen.
 
Ja, eigentlich kann das so gut wie jeder Sprache, aber ...

Für News auslesen würde ich nicht auf selbstgebaute Lösungen setzen, da sich der Aufbau der Seite ändern kann und du dann eventuell alles neu anpassen musst. Einfacher wäre es, wenn du einfach mit den bestehenden Techniken arbeitest.

D.h. du abonnierst dir auf der Seite die Nachrichten mittels RSS. Dafür kannst du dir selbst was schreiben, hast aber kein Aufwand mehr mit der Anpassung (und du kannst beliebig viele Seiten abonnieren und verwalten).

Bei wetter.com gibt es z.b. eine API (openweather). Da fällt also auch das Parsen der Seite weg (10.000 Anfragen pro Monat reichen dir sicherlich, nicht kommerziell).

Das könntest du sogar in HTML/JS realisieren, dann kannst du es quasi auf jedem Gerät benutzen.
 
Habe mittlerweile Ruby mit Mechanize am laufen.

Normale Requests etc. konnte ich schon testen. Irgendwie gibt es wohl aber eine Mechanize-Shell mit der ich dann direkt die Befehle eingeben kann und sehe was rauskommt (zumindest quellcode oder sowas). Wie installiere ich das?

Und mit welchem Befehl bekomme ich einfach mal den aktuellen Quellcode?

(Bin Windowsuser)
 
Zuletzt bearbeitet:
Da musst Du eigentlich nichts installieren, Du musst nur die irb (Interactive Ruby Shell) starten. Wenn Du Ruby aus einem Windows Installationspaket installiert hast, ist die dabei. Dafür musst folgendes machen:

Wenn Du Windows benutzt, öffne fxri aus dem Ruby-Ordner des Start-Menüs heraus.

Innerhalb von irb befindest Du Dich in der Ruby Runtime und kannst Rubycode direkt testen.

Code:
require 'mechanize'<ENTER>
agent = Mechanize.new <ENTER>
# uswusf.

Quellcode und Bsp. findest Du auf der Github Projektseite oder hier.
 
Selenium werfe ich auch noch als Kandidat in den Raum. Damit haben wir im Projekt unser Front-End testing automatisiert an den Stellen wo es ein Unit-Test einfach nicht tut bzw. zu umständlich wäre.
 
Im Prinzip sollte jede Sprache für den genannten Zweck geeignet sein, für die es ein Framework für die Netzwerkverbindung bzw. Socket gibt. Um dann einfacher mit dem HTML-Code umzugehen, ist eine Lib mit XPath-Unterstützung empfehlenswert.
In C# habe ich mal was ähnliches mit mit der Assembly (im Prinzip eine Lib) HtmlAgilityPack gemacht.
 
Zurück
Oben