Seriendownload mit mechanize

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Seriendownload mit mechanize

Beitragvon whaeva » Donnerstag 26. März 2009, 10:15

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=]links(self, **kwds)
Return iterable over links (mechanize.Link objects). [/code]
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...
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Donnerstag 26. März 2009, 10:29

Lad die Dateien doch ohne Mechanize herunter (urllib.urlretrieve). Dann ändert sich auch nichts in Mechanize.

Gruss
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Beitragvon whaeva » Donnerstag 26. März 2009, 10:34

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()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder