पायथन वेब से फाइल डाउनलोड करने के लिए विभिन्न मॉड्यूल जैसे urllib, अनुरोध आदि प्रदान करता है। मैं यूआरएल से फाइलों को कुशलतापूर्वक डाउनलोड करने के लिए पाइथन की अनुरोध लाइब्रेरी का उपयोग करने जा रहा हूं।
आइए अनुरोध लाइब्रेरी का उपयोग करके URL का उपयोग करके फ़ाइलें डाउनलोड करने की चरण दर चरण प्रक्रिया पर एक नज़र डालें-
<एच3>1. मॉड्यूल आयात करेंimport requests<एच3>2. लिंक या यूआरएल प्राप्त करें
url = 'https://www.facebook.com/favicon.ico' r = requests.get(url, allow_redirects=True)<एच3>3. सामग्री को नाम से सहेजें।
open('facebook.ico', 'wb').write(r.content)
फ़ाइल को facebook.ico के रूप में सहेजें।
उदाहरण
import requests url = 'https://www.facebook.com/favicon.ico' r = requests.get(url, allow_redirects=True) open('facebook.ico', 'wb').write(r.content)
परिणाम
हम देख सकते हैं कि फ़ाइल हमारी वर्तमान कार्यशील निर्देशिका में डाउनलोड (आइकन) है।
लेकिन हमें वेब से विभिन्न प्रकार की फाइलें जैसे इमेज, टेक्स्ट, वीडियो आदि डाउनलोड करने की आवश्यकता हो सकती है। तो आइए सबसे पहले पता करें कि यूआरएल किस प्रकार का डेटा लिंक कर रहा है-
>>> r = requests.get(url, allow_redirects=True) >>> print(r.headers.get('content-type')) image/png
हालांकि, एक बेहतर तरीका है, जिसमें वास्तव में इसे डाउनलोड करने से पहले यूआरएल के शीर्षलेख प्राप्त करना शामिल है। इससे हम उन फ़ाइलों को डाउनलोड करना छोड़ सकते हैं जिन्हें डाउनलोड नहीं किया जाना था।
>>> print(is_downloadable('https://www.youtube.com/watch?v=xCglV_dqFGI')) False >>> print(is_downloadable('https://www.facebook.com/favicon.ico')) True
फ़ाइल आकार द्वारा डाउनलोड को प्रतिबंधित करने के लिए, हम सामग्री-लंबाई शीर्षलेख से फ़ाइलज़ी प्राप्त कर सकते हैं और फिर अपनी आवश्यकता के अनुसार कर सकते हैं।
contentLength = header.get('content-length', None) if contentLength and contentLength > 2e8: # 200 mb approx return False
URL से फ़ाइल नाम प्राप्त करें
फ़ाइल नाम प्राप्त करने के लिए, हम url को पार्स कर सकते हैं। नीचे एक नमूना दिनचर्या है जो बैकस्लैश (/) के बाद अंतिम स्ट्रिंग प्राप्त करती है।
url= "https://www.computersolution.tech/wp-content/uploads/2016/05/tutorialspoint-logo.png" if url.find('/'): print(url.rsplit('/', 1)[1]
ऊपर url का फ़ाइल नाम देगा। हालांकि, ऐसे कई मामले हैं जहां फ़ाइल नाम की जानकारी यूआरएल में मौजूद नहीं है, उदाहरण के लिए - https://url.com/download। ऐसी स्थिति में, हमें सामग्री-विस्थापन शीर्षलेख प्राप्त करने की आवश्यकता होती है, जिसमें फ़ाइल नाम की जानकारी होती है।
import requests import re def getFilename_fromCd(cd): """ Get filename from content-disposition """ if not cd: return None fname = re.findall('filename=(.+)', cd) if len(fname) == 0: return None return fname[0] url = 'https://google.com/favicon.ico' r = requests.get(url, allow_redirects=True) filename = getFilename_fromCd(r.headers.get('content-disposition')) open(filename, 'wb').write(r.content)
उपरोक्त प्रोग्राम के साथ उपरोक्त यूआरएल-पार्सिंग कोड आपको ज्यादातर समय सामग्री-विस्थापन शीर्षलेख से फ़ाइल नाम देगा।