Wie an Javascript-generiertes HTML herankommen?
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? Gruss, Dinu
[ Dinu Gherman <gherman@darwin.in-berlin.de> ]
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.
Also ich konnte das Resultat des angegebenen Querystrings [1] wunderbar mit urllib2 laden und mit BeautifulSoup parsen... [1] Querystring: http://www.versiontracker.com/php/qs.php?mode=basic&action=search&str=transmit&srchArea=macosx| macosx-all&submit=Go -- Freiheit ist immer die Freiheit der Andersdenkenden. (Rosa Luxemburg)
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
"Diez B. Roggisch" <deets@web.de>:
[...] 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.
Wow! Das duerfte zusammen mit "Web Developper" das brauchbarste Plugin fuer Firefox sein.
Allerdings habe ich auf versiontracker gerade mal geschaut, und zB diese URL hier
liefert mir direkt eine Tabelle.
Komischerweise sehe ich nun auch den vollen HTML-Text ohne Tricks. Keine Ahnung, was da los war... So ermoeglicht es nette kleine Helferleins wie den folgenden (Aus- gabe beschraenkt auf fuenf lokale Programme): $ py25 installed.py Searching /Applications/Added/*.app adium 1.1.3 aquallegro 4.0 bittorrent 4.27.2 camino 1.5.2Int carbon copy cloner 3.0.1 Searching http://www.versiontracker.com for 'adium' adium x 1.1.3 Searching http://www.versiontracker.com for 'aquallegro' aquallegro 4.7 Searching http://www.versiontracker.com for 'bittorrent' transmission 0.91 bittorrent 4.27.2 Searching http://www.versiontracker.com for 'camino' 1password 2.5.3 camino 1.5.2 Searching http://www.versiontracker.com for 'carbon copy cloner' Comparing... Checking 'bittorrent'... Checking 'aquallegro'... Consider updating 'aquallegro' from '4.0' to '4.7' Checking 'camino'... Checking 'carbon copy cloner'... Das duerfte betraechtlich das Lesen der entsprechenden RSS-Feeds reduzieren. Mal sehen, wann daraus etwas "Verteilbares" wird... Vielen Dank! Dinu
"Diez B. Roggisch" <deets@web.de>:
[...] 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.
Wow, Klasse-Teil!
Allerdings habe ich auf versiontracker gerade mal geschaut, und zB diese URL hier
liefert mir direkt eine Tabelle.
Komischerweise bekomme ich nun auch den ganzen HTML-Code ohne weitere Tricks. Keine Ahnung, was da os war. Auf jeden Fall kann man damit praktische Helferlein wie den fol- genden machen (Ausgabe auf fuenf lokale Programme beschraenkt): $ py25 installed.py Searching /Applications/Added/*.app adium 1.1.3 aquallegro 4.0 bittorrent 4.27.2 camino 1.5.2Int carbon copy cloner 3.0.1 Searching http://www.versiontracker.com for 'adium' adium x 1.1.3 Searching http://www.versiontracker.com for 'aquallegro' aquallegro 4.7 Searching http://www.versiontracker.com for 'bittorrent' transmission 0.91 bittorrent 4.27.2 Searching http://www.versiontracker.com for 'camino' 1password 2.5.3 camino 1.5.2 Searching http://www.versiontracker.com for 'carbon copy cloner' carbon copy cloner 3.0.1 apple carbon sound manager Comparing... Checking 'bittorrent'... Checking 'aquallegro'... Consider updating 'aquallegro' from '4.0' to '4.7' Checking 'camino'... Checking 'carbon copy cloner'... Das duerfte einiges an RSS-Feed-Leserei sparen. Mal sehen, wann daraus etwas "Verteilbares" wird. Vielen Dank, Dinu
participants (3)
-
Diez B. Roggisch
-
Dinu Gherman
-
Sebastian Wiesner