दिलचस्प पोस्ट
JSON को ResultSet के सबसे कुशल रूपांतरण? डेस्कटॉप आइकनों को प्रोग्रामर से कैसे छिपाएंगे? एंड्रॉइड 5.0 पर रीसायकलदृश्य का उपयोग करने की कोशिश करते समय एप्लिकेशन क्रैश हो रहा है विंडो को बंद करने के दौरान चलाने के लिए एक कार्य शेड्यूल कैसे करें पांडा डेटाफ्रेम में हर तीन कॉलम के औसत का पता लगाएं फ्रेगमेंट के लिए थीम सेट करें लॉगिंग ढांचा असंगति पायथन: मेमोरी में विशाल टेक्स्ट फाइल को कैसे पढ़ा जाए दूसरे वर्ग में एक स्टड क्लास ऑब्जेक्ट को परिवर्तित / डालें presentViewController: IOS पर क्रैश <6 (ऑटोलेआउट) मैं तारों की सूची से सूची कैसे बना सकता हूं? इकाई फ़्रेमवर्क और SQL सर्वर देखें स्प्रिंग सुरक्षा / स्प्रिंगएमवीसी में मैन्युअल रूप से प्रमाणित उपयोगकर्ता कैसे सेट करें स्वयं कार्यान्वयन के साथ एडब्ल्यूटी ईवेंट क़तार को कैसे बदलें फाइबोनैचि रिकर्सिव फ़ंक्शन "काम" कैसे करता है?

कैसे पता कैसे urllib.urlretrieve सफल होता है?

urllib.urlretrieve चुपचाप देता है भले ही फाइल दूरस्थ http सर्वर पर मौजूद नहीं है, यह केवल नामित फाइल में एक html पृष्ठ बचाता है। उदाहरण के लिए:

 urllib.urlretrieve('http://google.com/abc.jpg', 'abc.jpg') 

बस चुप्पी से लौटाता है, भले ही abc.jpg google.com सर्वर पर मौजूद न हो, उत्पन्न abc.jpg एक वैध जेपीजी फाइल नहीं है, यह वास्तव में एक html पृष्ठ है मुझे लगता है कि वापस आने वाले हेडर (एक सर्कलप्लेब। एचटीटीपी संदेश उदाहरण) वास्तव में यह बता सकते हैं कि पुनर्प्राप्ति की सफलता या नहीं, लेकिन मैं httplib.HTTPMessage लिए कोई भी दस्तावेज़ नहीं httplib.HTTPMessagehttplib.HTTPMessage

क्या कोई इस समस्या के बारे में कुछ जानकारी प्रदान कर सकता है?

Solutions Collecting From Web of "कैसे पता कैसे urllib.urlretrieve सफल होता है?"

urllib2 का उपयोग करने पर विचार करें यदि आपके मामले में संभव है यह urllib तुलना में अधिक उन्नत और आसान है

आप आसानी से किसी भी HTTP त्रुटियों का पता लगा सकते हैं:

 >>> import urllib2 >>> resp = urllib2.urlopen("http://google.com/abc.jpg") Traceback (most recent call last): <<MANY LINES SKIPPED>> urllib2.HTTPError: HTTP Error 404: Not Found 

resp वास्तव में HTTPResponse ऑब्जेक्ट है जिसके साथ आप बहुत उपयोगी चीजें कर सकते हैं:

 >>> resp = urllib2.urlopen("http://google.com/") >>> resp.code 200 >>> resp.headers["content-type"] 'text/html; charset=windows-1251' >>> resp.read() "<<ACTUAL HTML>>" 

मैं इसे सरल रखता हूं:

 # Simple downloading with progress indicator, by Cees Timmerman, 16mar12. import urllib2 remote = r"http://some.big.file" local = r"c:\downloads\bigfile.dat" u = urllib2.urlopen(remote) h = u.info() totalSize = int(h["Content-Length"]) print "Downloading %s bytes..." % totalSize, fp = open(local, 'wb') blockSize = 8192 #100000 # urllib.urlretrieve uses 8192 count = 0 while True: chunk = u.read(blockSize) if not chunk: break fp.write(chunk) count += 1 if totalSize > 0: percent = int(count * blockSize * 100 / totalSize) if percent > 100: percent = 100 print "%2d%%" % percent, if percent < 100: print "\b\b\b\b\b", # Erase "NN% " else: print "Done." fp.flush() fp.close() if not totalSize: print 

दस्तावेज़ीकरण के अनुसार, दस्तावेज नहीं है

संदेश तक पहुंच प्राप्त करने के लिए ऐसा लगता है कि आप ऐसा कुछ करते हैं:

 a, b=urllib.urlretrieve('http://google.com/abc.jpg', r'c:\abc.jpg') 

ख संदेश उदाहरण है

चूंकि मैंने सीखा है कि अजगर जब मैं टाइप करता हूँ तब वह हमेशा पाइथन की आत्मनिर्भर होने की क्षमता का उपयोग करने के लिए उपयोगी होता है

 dir(b) 

मैं साथ खेलने के लिए बहुत से तरीकों या कार्यों को देखता हूं

और फिर मैं बी के साथ काम करना शुरू कर दिया

उदाहरण के लिए

 b.items() 

बहुत सारी दिलचस्प चीजों की सूची है, मुझे संदेह है कि इन चीजों के साथ खेलना आपको उस विशेषता को प्राप्त करने की अनुमति देगा जो आप करना चाहते हैं

माफ करना, यह एक शुरुआती का जवाब है, लेकिन मैं सीख रहा हूं कि अपने सीखने में सुधार करने के लिए आत्मनिरीक्षण क्षमताओं का उपयोग कैसे करना है और आपके प्रश्नों को ऊपर उठाया गया है।

अच्छी तरह से मैं इस से संबंधित कुछ दिलचस्प कोशिश कर रहा था- मैं सोच रहा था कि क्या मैं उन सभी चीजों से आउटपुट प्राप्त कर सकता हूं जो डायरेक्टरी में दिखाए गए हैं जिन्हें मापदंडों की जरूरत नहीं थी, मैंने लिखा:

 needparam=[] for each in dir(b): x='b.'+each+'()' try: eval(x) print x except: needparam.append(x) 

आप एक नया URL ओपनर (FancyURLopener से वारिस) बना सकते हैं और अपवाद छोड़ सकते हैं या त्रुटियों को किसी भी तरह से संभाल सकते हैं। दुर्भाग्यवश, FancyURLPener 404 और अन्य त्रुटियों को अनदेखा करता है यह प्रश्न देखें:

Urlib.urlretrieve में 404 त्रुटि कैसे लें

मैं अपने स्वयं के retrieve क्रियान्वयन को समाप्त कर लिया, pycurl की सहायता से यह urllib / urllib2 की तुलना में अधिक प्रोटोकॉल का समर्थन करता है, आशा है कि यह अन्य लोगों की सहायता कर सके

 import tempfile import pycurl import os def get_filename_parts_from_url(url): fullname = url.split('/')[-1].split('#')[0].split('?')[0] t = list(os.path.splitext(fullname)) if t[1]: t[1] = t[1][1:] return t def retrieve(url, filename=None): if not filename: garbage, suffix = get_filename_parts_from_url(url) f = tempfile.NamedTemporaryFile(suffix = '.' + suffix, delete=False) filename = f.name else: f = open(filename, 'wb') c = pycurl.Curl() c.setopt(pycurl.URL, str(url)) c.setopt(pycurl.WRITEFUNCTION, f.write) try: c.perform() except: filename = None finally: c.close() f.close() return filename 
 class MyURLopener(urllib.FancyURLopener): http_error_default = urllib.URLopener.http_error_default url = "http://page404.com" filename = "download.txt" def reporthook(blockcount, blocksize, totalsize): pass ... try: (f,headers)=MyURLopener().retrieve(url, filename, reporthook) except Exception, e: print e 

🙂 StackOverflow पर मेरी पहली पोस्ट, साल के लिए एक गुप्त किया गया है। 🙂

दुर्भाग्य से डीआईआर (urllib.urlretrieve) उपयोगी जानकारी में कमी है। तो इस धागा से अब तक मैंने यह लिखने की कोशिश की:

 a,b = urllib.urlretrieve(imgURL, saveTo) print "A:", a print "B:", b 

जो इस का उत्पादन किया:

 A: /home/myuser/targetfile.gif B: Accept-Ranges: bytes Access-Control-Allow-Origin: * Cache-Control: max-age=604800 Content-Type: image/gif Date: Mon, 07 Mar 2016 23:37:34 GMT Etag: "4e1a5d9cc0857184df682518b9b0da33" Last-Modified: Sun, 06 Mar 2016 21:16:48 GMT Server: ECS (hnd/057A) Timing-Allow-Origin: * X-Cache: HIT Content-Length: 27027 Connection: close 

मुझे लगता है कि कोई भी जांच सकता है:

 if b.Content-Length > 0: 

मेरा अगला कदम एक परिदृश्य का परीक्षण करना है जहां पुनर्प्राप्त करना विफल रहता है …

किसी अन्य सर्वर / वेबसाइट के विरुद्ध परिणाम – "बी" में वापस आती-थोड़ी यादृच्छिक है, लेकिन कुछ निश्चित मानों का परीक्षण कर सकता है:

 A: get_good.jpg B: Date: Tue, 08 Mar 2016 00:44:19 GMT Server: Apache Last-Modified: Sat, 02 Jan 2016 09:17:21 GMT ETag: "524cf9-18afe-528565aef9ef0" Accept-Ranges: bytes Content-Length: 101118 Connection: close Content-Type: image/jpeg A: get_bad.jpg B: Date: Tue, 08 Mar 2016 00:44:20 GMT Server: Apache Content-Length: 1363 X-Frame-Options: deny Connection: close Content-Type: text/html 

'बुरे' मामले में (गैर-मौजूद छवि फ़ाइल) "बी" (Googlebot?) HTML कोड का एक छोटा सा हिस्सा पुनर्प्राप्त किया गया और उसे लक्ष्य के रूप में सहेजा गया, इसलिए सामग्री-लंबाई 1363 बाइट्स की।