PhantomJS - was ist das & wie benutze ich das in Python?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
kaineanung
User
Beiträge: 145
Registriert: Sonntag 5. April 2015, 20:57

Hallo Leute,

ich habe hier ein Problem und hoffe daß Ihr mir da ein wenig behilflich sein könnt (wie immer wart ihr das dann auch).

Ich habe in meinem ersten Python-Projekt ein HTML-Parser/Scraper erstellt welches mir bestimmte Daten von einer Webseite ermittelt und in eine XML-Datei speichert.
Jetzt habe ich aber eine (Web-) Quelle die die Daten nicht in HTML ausgibt, zumindest nicht sofort sondern per JS 'nachladen tut' und erst im Browser 'abbildet' (zusammenstellt oder wie auch immer dieser Vorgang genannt wird).
So, mit urllib2 und BeutifulSoup komme ich hier also nicht weiter.
Ein wenig gegoogelt und hier und da ist das Stichwort 'PhantomJS' gefallen. Und das in Verbindung mit einem GhostDriver oder, in älteren Versionen einem 'Webdriver'.

Die Situation ist nun die daß ich nur Bahnhof verstehe.

Ich habe mir PhantomJS installiert (apt-get install ....) und würde gerne wissen
a) wie ich das nun in Python implementieren kann und was es auf sich hat mit dem 'Ghostdriver' und
b) wie ich das benutzen kann (falls hier jemand überhaupt Erfahrung damit hat. Denn PhantomJS wird ja wohl nichts mit Python zu tun haben ausser das man es in Python verwenden kann). Wenn sich jemand findet der wenigstens eine gute Dokumentation (HowTo, Manuals, Code-Examples u.ä.) hat die auch einem Semi-Amateur (also noch nicht einmal einen richtigen Amateur) halbwegs verständlich sein könnte, wäre ich wirklich dankbar wenn er dies mir mitteilen könnte.

Ich danke schon einmal im Voraus für eure Hilfe!
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Im Grunde ist PhantomJS nichts anderes als ein Webbrowser, der ohne Bildschirmausgabe funktioniert, und automatisierbar ist. Damit eignet er sich sehr gut dazu, JS-Code zu testen, wo Unit-Testing nicht mehr reicht.

Aber fuer deine Problemstellung halte ich das nicht notwendigerweise fuer richtig, im Gegenteil. Denn eine Seite, die ihre Inhalte per JSON nachlaedt, die ist doch *VIEL* praktischer, weil schon gleich maschinenlesbar. Da musst du ja noch nicht mal nach XML wandeln - ausser du bestehst darauf.

Insofern wuerde ich da auch gar keine Zeit drauf verschwenden. Stattdessen lieber die Daten mit `requests` vom Server holen.
kaineanung
User
Beiträge: 145
Registriert: Sonntag 5. April 2015, 20:57

@__deets__

Interessanter Vorschlag wie ich finde.
Und ich kann das mit der urllib2 auch machen?

Wie habe ich das zu verstehen? Ich sende den Request, sofern ich den aus der Webseite ermitteln kann, direkt an den Webserver und er 'denkt' es wäre der 'nachgereichte' Request eines Browsers?
Hast du da weiterführende Informationen, Links oder noch besser eine Anleitung mit Codebeispielen für mich?
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Der Server weiss nichts von Browsern. Er bekommt HTTP-Requests. Theoretisch kannst du die auch mit urllib2 machen - aber das ist muehseliger, weil es zB die Verwaltung von Session-Cookies nicht mitbringt.

Zu requests gibt es *richtig* viel Dokumentation, mit Beispielen, und das sogar auf deutsch: http://requests-docs-de.readthedocs.org/de/latest/

Einfach mal anfangen.
Antworten