עבור לתוכן

הורדת קבצים דרך פייתון

Featured Replies

פורסם

היי,

רציתי לדעת איך אני יכול להוריד קבצים דרך פייתון?

אני יודע שאפשר לעשות את זה באמצעות URLLIB2 כך:

response = urllib2.urlopen('

http://blabla.com/getfile.aspx?id=1')

file = response.read()

אבל זה לא מצליח... נראה לי בגלל שהאתר מביא את הקובץ דרך דף ASP ולא ישירות..

יכול להיות שזאת הבעיה?

מישהו יכול לעזור לי ולהגיד לי איך אני יכול להוריד את הקובץ שבמקרה הזה הוא בID=1???

תודה רבה!

פורסם

גם אם זה asp לא אמורה להיות בעיה.

הבעיה יכולה להיות אם getfile.aspx לא מחזיר את הקובץ ישירות, אלא רק מכיל לינק לקובץ שאמור לרדת אוטומטית איכשהו.

מה בדיוק יש ב-file אחרי ההורדה?

פורסם
  • מחבר

הFILE הוא קובץ MP3..

כשניסיתי לעשות את השיטה שציינתי למעלה זה החזיר לי קובץ MP3 ריק.

אם אני רושם בדפדפן את הURL שרשמתי אז הוא כן מתחיל להוריד לי קובץ MP3.

מישהו יודע איך אפשר לעשות שזה יעבוד?

תודה רבה!

פורסם

נסה להשתמש ב-Wireshark כדי לנטר את התעבורה כדי לראות מה קורה בדיוק. תשווה בין מה שקורה כשאתה כותב את ה-URL בדפדפן ובין כשאתה מנסה להוריד בפייתון את הקובץ.

פורסם
  • מחבר

בשניהם זה פפונה לאותו URL אבל משום מה רואים בפקטה שדרך פייתון הCONNECTION הוא על CLOSE ודרך האתר הCONNECTION על KEEP-ALIVE.

רעיון?

פורסם

השאלה היא איזו תשובה מתקבלת מהאתר. ה-close/keep-alive לא אמור לשנות (זה רק קובע אם לנתק את החיבור עם האתר אחרי שהקובץ סיים לרדת או לא).

פורסם
  • מחבר

זה מה שאני מקבל בTCP STREAM אחרי שאני מפעיל את הסקריפט:

(כמובן שאני זה ששינה את שם האתר לכוכביות...)

GET /Students/GetMp3.aspx?id=1 HTTP/1.1

Accept-Encoding: identity

Host: www.***********.com

Connection: close

User-Agent: Python-urllib/2.7

-------------------------------------------------------------------------------

HTTP/1.1 200 OK

Connection: close

Date: Wed, 26 Jan 2011 18:43:07 GMT

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-AspNet-Version: 2.0.50727

Cache-Control: private

Content-Length: 0

פורסם
  • מחבר

צודק, סליחה:

GET /Students/GetMp3.aspx?id=3 HTTP/1.1

Host: www.***********.com

Connection: keep-alive

Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10

Accept-Encoding: gzip,deflate,sdch

Accept-Language: en-US,en;q=0.8

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Cookie: __utmz=121087831.1294747141.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=%D7%A7%D7%99%D7%93%D7%95%D7%9D; StudentId=******; AuthKey=************************************************; __utma=121087831.369620101.1294747141.1295804831.1295878968.13

HTTP/1.1 200 OK

Date: Wed, 26 Jan 2011 19:49:16 GMT

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-AspNet-Version: 2.0.50727

Content-Disposition: attachment; filename=alef3.mp3

Cache-Control: private

Content-Type: text/html

Content-Length: 1841600

.........,.......G9@......9L\.(?..&#.t+.^.\$b..O..Q......@3....@....."..X

..-..r.8...pZ......h..18"..O.....(Q.....@..O...x,..(...b...@?.... ....<#.1.

q..TA?...zD.|..x.8...|G....-..>...........j.@1@..@...-.`..........

.....Y.EX..].H r.

...........X.....2BjabyH.mu.^.V.^3j.e.G...p........\..V...e.....[./.T.p]..k......t.X..a.e...

..n#....|..[.a.t..=m.X...../.

...wX..^...6..-...ko-Y.?.uq..r^.H..5.F.......:......../>"C....i............3;....................`......I..@...!..a..9.[).W..............Ey..1.!Q.a...eHP`..g.f..t.a.Jb.*...9...2A.....d..x......A... Q...Z.....z..#...'..p.. ....cQ....$8.A.h..........A...c.A...^P......j.8.%..`....(....i.\\hP..A...-.A.l. e$.jbc```...

E..h....... .+v.)....2..p@......b..@.e$f2"

..".@........#p.1...

וממשיך עם חרעפש כזה בגלל שזה MP3....

פורסם
  • מחבר

איך אני עושה את זה?

פורסם

השרת הזה שלך? אתה יכול להוריד את הקובץ דרך הדפדפן?

אם השרת לא שלך ואתה מסוגל להוריד אותו מהדפדפן, יש מצב שהטעתי אותך ואין קשר לcontent type.

פורסם
  • מחבר

אני חושב שזאת באמת הבעייה(הקטע עם היוזר אייג'נט..)

תסלחו לי על הבורות, אני עדיין מתחיל.

כתבתי את זה:

import urllib2

mp3file = urllib2.urlopen("http://www.kidum.com/Students/GetMp3.aspx?id=1"[,'User-Agent':'Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11'])

output = open('test.mp3','wb')

output.write(mp3file.read())

output.close()

וזה עדיין לא עובד לי..(SYNTAX ERROR)

אני צריך לכתוב CLASS ולקשר אותו לסקריפט הזה?

איך אני עושה שזה יעבוד?

תודה רבה!

פורסם

syntax error אומר שבכלל קוד הפייתון שכתבת לא תקין (כנראה חסרים לך סוגריים או מרכאות, או פסיק לא במקום).

חוץ מזה, לא הבנתי מה בדיוק ניסית לעשות. urlopen לא מאפשרת לך להגדיר headers (הפרמטר השני הוא ה-http post data, שזה התוכן של הבקשה בבקשות POST). בשביל להגדיר headers אתה צריך להשתמש ב-urllib2.Request או urllib2.build_opener.

כאן תוכל למצוא דוגמאות:

http://docs.python.org/library/urllib2.html#examples

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים