[Python-de] Wie an Javascript-generiertes HTML herankommen?
Diez B. Roggisch
deets at web.de
Do Nov 1 12:36:53 UTC 2007
Hallo,
> anscheinend verbreitet sich die Unsitte, Teile von Websites
> mit Javascript zu erzeugen, damit man sie nicht so einfach
> auslesen kann. Beispiel: Man suche in www.versiontracker.com
> nach irgendeinem Programm, und man bekommt eine mit JS gene-
> rierte Tabelle.
>
> Mit dem DOM-Inspektor in Firefox kann man das vollstaendige
> HTML sehen, aber bei einer Abfrage ueber urllib eben nicht.
>
> Gibt es eine funktionierende Moeglichkeit, das rein program-
> matisch mit Python hinzubekommen, evtl. unter Verwendung ei-
> nes JS-Interpreters? Oder sonstwie? Vielleicht ganz verrueckt:
> kann man nicht mit PyPy das JS in Python umwandeln und aus-
> fuehren? Hat jemand hier schon so etwas gemacht?
PyPy und rueckuebersetzung werden dir hier nicht helfen.
Es gibt da leider nicht wirklich viel das man ohne echten browser machen kann.
Denn es geht ja nicht nur um das JS an sich, sondern auch um
browser-spezifische Event + DOM-modelle.
Jetzt hast du im Grunde zwei moeglichkeiten:
- du benutzt einen Browser, den du irgendwie "einbetten" kannst und der den
Zugriff auf das DOM erlaubt. Ich _glaube_ mit WebKit zB ist das moeglich.
- du versuchst, einen Browser mit einer Seite von dir zu starten, die auf
einem lokalen Server liegt. Diese muss dann ihrereseits mittels JS die
gewuenschte Seite anfordern, deren DOM scrapen + das ganze an deinen Server
zurueckliefern. *argl*
- du gehst doch mit urrlib ran :) Denn was auch immer das JS auf der Seite
macht um die Tabelle zu erzeugen: es hat dazu ein AJAX-call stattgefunden.
Und den kannst du natuerlich auch "einfach" machen.
Um das zu eruieren was dazu notwendig ist, ist der FireBug fuer den FF
hochgradig zu empfehlen. Dort kann man zB sehen, welche requests alle von
einer Seite ausgehen, in dem Net-Tab.
Allerdings habe ich auf versiontracker gerade mal geschaut, und zB diese URL
hier
http://www.versiontracker.com/php/qs.php?mode=basic&by=releaseDate&action=search&str=connect&srchArea=macosx&dir=desc&pg=2
liefert mir direkt eine Tabelle.
MfG Diez