[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