urlretrieve lädt nicht richtig runter

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.
Antworten
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

Hallo, ich möchte eine datei mit urlretrieve downloaden, nur lädt er irgendwie nur 503 byte runter.

Mit file.write(urlopen(link).read(), "wb") habe ich es auch bereits versucht, nur hier ebenfalls nur 503 byte.

Jemand einen heißen tipp für mich?
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Kannst Du ein paar Details posten: Code, URL?
https://www.xing.com/go/invite/18513630.6a91d4
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

tut mir leid dass das jetzt wahrscheinlich ober noobig ausgucken wird:

Code: Alles auswählen

import urllib
f = urllib.urlopen("http://www.getdota.com")
s = f.read()
verStart = 'Latest Map: <span class="version">'
verEnd = '</span></div>'
ver = s[s.find(verStart) + len(verStart):s.find(verEnd, s.find(verStart))]
print "Newest Dota: %s" % ver
f.close()
f = urllib.urlopen("http://www.getdota.com/download/map/" + ver)
s = f.read()
linkStart = "<script>document.location.href='"
linkEnd = "';</script>"
link = s[s.find(linkStart) + len(linkStart):s.find(linkEnd, s.find(linkStart))]
f.close()
urllib.urlretrieve(link, "DotA Allstars v" + ver + ".w3x")
[/code]
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

OK, Du versuchst also aktuell den Inhalt der URL

Code: Alles auswählen

http://ineedwahwah.com/getdota/eng/DotA Allstars v6.61c.w3x
in die Datei 'DotA Allstars v6.61c.w3x' zu speichern. Diese URL liefert einen 404er folgenden Inhalt.

Code: Alles auswählen

<link href=http://ineedwahwah.com/z.css rel="stylesheet" type="text/css">

<center>

<div id=logo >
        <center><table><tr><td width=500 height=25 background="http://ineedwahwah.com/pic/bg.png" align=right valign=middle>
                <a href="http://ineedwahwah.com/"><strong>ineedwahwah.com</strong></a>
        </td></tr></table></center>
</div>

<div id=menu >
        <a href="index.html">main</a>

</div>

<div id=main >

error...

</div>

<div id=credit >
        <center><font size=1> created by z </font></center>
</div>

</center>
Ist das das, was Du erwartest?
https://www.xing.com/go/invite/18513630.6a91d4
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

lutz.horn hat geschrieben:OK, Du versuchst also aktuell den Inhalt der URL

Code: Alles auswählen

http://ineedwahwah.com/getdota/eng/DotA Allstars v6.61c.w3x
in die Datei 'DotA Allstars v6.61c.w3x' zu speichern. Diese URL liefert einen 404er folgenden Inhalt.

Code: Alles auswählen

<link href=http://ineedwahwah.com/z.css rel="stylesheet" type="text/css">

<center>

<div id=logo >
        <center><table><tr><td width=500 height=25 background="http://ineedwahwah.com/pic/bg.png" align=right valign=middle>
                <a href="http://ineedwahwah.com/"><strong>ineedwahwah.com</strong></a>
        </td></tr></table></center>
</div>

<div id=menu >
        <a href="index.html">main</a>

</div>

<div id=main >

error...

</div>

<div id=credit >
        <center><font size=1> created by z </font></center>
</div>

</center>
Ist das das, was Du erwartest?
hm im browser klappt der download mit dem generierten link, nur anscheinend nicht mit python.
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

Vielleicht erwartet der Server einen spezielle User-Agent-Header? Denkbar ist alles :)
https://www.xing.com/go/invite/18513630.6a91d4
BlackJack

@Krauzi: Da sind Leerzeichen in der "URL", damit ist's aber keine gültige URL. Im Browser geht das, weil der die vor dem Absenden der Anfrage entsprechend kodiert, weil der gewohnt ist, von Menschen "Schrott" zu bekommen und versucht den vor der Verwendung zu bereinigen.
Krauzi
User
Beiträge: 77
Registriert: Montag 22. Oktober 2007, 18:06
Kontaktdaten:

gaaaaaaaaaaaanz genau, du kamst mir blos eine sekunde zuvor.
Ich hatte das problem schon mal und deshalb habe ich es auch gerade selbst gelöst.

An leute die evtl man das selbe problem haben sollten:
aus den leerzeichen müssten %20 gemacht werden, das geschieht so:

Code: Alles auswählen

link = link.replace(" ", "%20")
@lutz.horn:
das wäre auch eine denkbare möglichkeit gewesen, der server könnte einen .w3x handler für php machen. Dann könnte er untersuchen, ob die anfrage überhaupt von einem browser ausgeht und dann erst den header setzen.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Code: Alles auswählen

>>> urllib.quote("www.test.hallo welt.html")
'www.test.hallo%20welt.html'
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Rebecca, deine Welt ist echt komisch, mit Leerzeichen im Domainnamen und .html als TLD, da grustelts einen fast schon :D
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten