2010-10-26 13 views
26

दो भाग प्रश्न। मैं इंटरनेट संग्रह से एकाधिक संग्रहित कोरी डॉक्टरो पॉडकास्ट डाउनलोड करने की कोशिश कर रहा हूं। पुराना है जो मेरे आईट्यून्स फ़ीड में नहीं आता है। मैंने स्क्रिप्ट लिखी है लेकिन डाउनलोड की गई फाइलें ठीक तरह से स्वरूपित नहीं हैं।मैं urllib2 का उपयोग कर पायथन में ज़िप फ़ाइल कैसे डाउनलोड करूं?

प्रश्न 1 - ज़िप एमपी 3 फ़ाइलों को डाउनलोड करने के लिए मैं क्या बदलूं? प्रश्न 2 - यूआरएल में चर को पारित करने का एक बेहतर तरीका क्या है?

# and the base url. 

def dlfile(file_name,file_mode,base_url): 
    from urllib2 import Request, urlopen, URLError, HTTPError 

    #create the url and the request 
    url = base_url + file_name + mid_url + file_name + end_url 
    req = Request(url) 

    # Open the url 
    try: 
     f = urlopen(req) 
     print "downloading " + url 

     # Open our local file for writing 
     local_file = open(file_name, "wb" + file_mode) 
     #Write to our local file 
     local_file.write(f.read()) 
     local_file.close() 

    #handle errors 
    except HTTPError, e: 
     print "HTTP Error:",e.code , url 
    except URLError, e: 
     print "URL Error:",e.reason , url 

# Set the range 
var_range = range(150,153) 

# Iterate over image ranges 
for index in var_range: 

    base_url = 'http://www.archive.org/download/Cory_Doctorow_Podcast_' 
    mid_url = '/Cory_Doctorow_Podcast_' 
    end_url = '_64kb_mp3.zip' 
    #create file name based on known pattern 
    file_name = str(index) 
    dlfile(file_name,"wb",base_url 

यह स्क्रिप्ट से here

उत्तर

47

यहां बताया गया है कि मैं यूआरएल बिल्डिंग और डाउनलोडिंग से कैसे निपटूंगा। मैं फ़ाइल को यूआरएल के बेसनाम (पीछे पीछे स्लैश के बाद अंतिम बिट) के रूप में नामित करना सुनिश्चित कर रहा हूं और मैं फ़ाइल को खोलने के लिए with खंड का भी उपयोग कर रहा हूं। यह ContextManager का उपयोग करता है जो अच्छा है क्योंकि जब ब्लॉक निकलता है तो वह उस फ़ाइल को बंद कर देगा। इसके अलावा, मैं यूआरएल के लिए स्ट्रिंग बनाने के लिए एक टेम्पलेट का उपयोग करता हूं। urlopen को अनुरोध ऑब्जेक्ट की आवश्यकता नहीं है, बस एक स्ट्रिंग।

import os 
from urllib2 import urlopen, URLError, HTTPError 


def dlfile(url): 
    # Open the url 
    try: 
     f = urlopen(url) 
     print "downloading " + url 

     # Open our local file for writing 
     with open(os.path.basename(url), "wb") as local_file: 
      local_file.write(f.read()) 

    #handle errors 
    except HTTPError, e: 
     print "HTTP Error:", e.code, url 
    except URLError, e: 
     print "URL Error:", e.reason, url 


def main(): 
    # Iterate over image ranges 
    for index in range(150, 151): 
     url = ("http://www.archive.org/download/" 
       "Cory_Doctorow_Podcast_%d/" 
       "Cory_Doctorow_Podcast_%d_64kb_mp3.zip" % 
       (index, index)) 
     dlfile(url) 

if __name__ == '__main__': 
    main() 
+0

एक चैंप की तरह काम किया। धन्यवाद! – Justjoe

+0

यूआरएल में इस्तेमाल किए गए "% d" के बारे में मैं एक और आखिरी सवाल कहां से सीख सकता हूं, मैं अभी भी काम कर रहा हूं कि यह कैसे काम कर रहा है पर थोड़ा सा स्केची है। – Justjoe

+0

स्ट्रिंग स्वरूपण के लिए दस्तावेज़ देखें: http://docs.python.org/library/stdtypes.html#string-formatting – dcolish

संबंधित मुद्दे