Seite 1 von 1

Seriendownload mit mechanize

Verfasst: Donnerstag 26. März 2009, 10:15
von whaeva
http://wwwsearch.sourceforge.net/mechanize/

Ich "browse" eine Seite mit Links, über die mit

Code: Alles auswählen

for link in br.links(url_regex="match"):
iteriert werden kann.
Die Links sind in Wirklichkeit Aufrufe einer JavaScript-Funktion die dann über document.href = URI einen echten Browser zum Dateidownload veranlassen würde.
Die JavaScript-Funktion ist einfach mit Python nachzubilden und gibt URI zurück.
Ich versuche dann mit file = br.open(URI) die Daten zu holen.

Das funktioniert auch - aber nur einmal.

Ich vermute es liegt an

Code: Alles auswählen

links(self, **kwds)
Return iterable over links (mechanize.Link objects). 
und der Tatsache, dass Browser die Datei "ansieht" und nicht mehr die Seite mit den Links.
Aber auch ein br.back() bringt nicht den gewünschten Erfolg.

Ich werde in der Zwischenzeit versuchen, mir die Response Headers anzeigen zu lassen, aber falls jemand das Problem erkennt...

Verfasst: Donnerstag 26. März 2009, 10:29
von rayo
Lad die Dateien doch ohne Mechanize herunter (urllib.urlretrieve). Dann ändert sich auch nichts in Mechanize.

Gruss

Verfasst: Donnerstag 26. März 2009, 10:34
von whaeva
Ich weiß nicht ob das bei einer gesicherten und authentifizierten Verbindung geht.
Aber ich habe inzwischen herausgefunden, dass mechanize.Browser.links() ein generator ist. Vielleicht macht Browser.back() nicht das Erwartete und bringt den generator "durcheinander"?

Jedenfalls baue ich mir jetzt erst eine Liste mit allen Links und öffne die dann mit Browser.open(URI)

Das scheint zu funktionieren. Header übrigens mit

Code: Alles auswählen

print "httplib.HTTPMessage"
print br.response().info()