পাইথন ওয়েব থেকে ফাইল ডাউনলোড করার জন্য বিভিন্ন মডিউল যেমন urllib, অনুরোধ ইত্যাদি প্রদান করে। ইউআরএলগুলি থেকে ফাইলগুলিকে দক্ষতার সাথে ডাউনলোড করতে আমি পাইথনের অনুরোধ লাইব্রেরি ব্যবহার করতে যাচ্ছি৷
অনুরোধ লাইব্রেরি-
ব্যবহার করে ইউআরএল ব্যবহার করে ফাইল ডাউনলোড করার ধাপে ধাপে পদ্ধতির দিকে নজর দেওয়া যাক1. মডিউল আমদানি করুন
import requests
2. লিঙ্ক বা ইউআরএল পান
url = 'https://www.facebook.com/favicon.ico' r = requests.get(url, allow_redirects=True)
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)
ফলাফল
আমরা দেখতে পাচ্ছি ফাইলটি ডাউনলোড করা হয়েছে(আইকন) আমাদের বর্তমান ওয়ার্কিং ডিরেক্টরিতে৷
৷কিন্তু আমাদের ওয়েব থেকে বিভিন্ন ধরনের ফাইল যেমন ইমেজ, টেক্সট, ভিডিও ইত্যাদি ডাউনলোড করতে হতে পারে। তাহলে চলুন প্রথমে url-
-এর সাথে লিঙ্ক করা ডেটার ধরনটি জেনে নেওয়া যাক>>> r = requests.get(url, allow_redirects=True) >>> print(r.headers.get('content-type')) image/png
যাইহোক, একটি বুদ্ধিমান উপায় আছে, যা প্রকৃতপক্ষে ডাউনলোড করার আগে একটি url-এর শিরোনামগুলি আনার সাথে জড়িত। এটি আমাদের ফাইল ডাউনলোড করা এড়িয়ে যেতে দেয় যা ডাউনলোড করার জন্য ছিল না।
>>> 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= "https://www.computersolution.tech/wp-content/uploads/2016/05/tutorialspoint-logo.png" if url.find('/'): print(url.rsplit('/', 1)[1]
উপরে url এর ফাইলের নাম দেবে। যাইহোক, এমন অনেক ক্ষেত্রে আছে যেখানে ফাইলের নামের তথ্য 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)
উপরের প্রোগ্রামের সাথে একত্রে উপরের ইউআরএল-পার্সিং কোডটি আপনাকে বেশিরভাগ সময় বিষয়বস্তু-ডিসপোজিশন শিরোনাম থেকে ফাইলের নাম দেবে।