কম্পিউটার

পাইথন ব্যবহার করে ওয়েব থেকে ফাইল ডাউনলোড করছেন?


পাইথন ওয়েব থেকে ফাইল ডাউনলোড করার জন্য বিভিন্ন মডিউল যেমন 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)

উপরের প্রোগ্রামের সাথে একত্রে উপরের ইউআরএল-পার্সিং কোডটি আপনাকে বেশিরভাগ সময় বিষয়বস্তু-ডিসপোজিশন শিরোনাম থেকে ফাইলের নাম দেবে।


  1. lxml ব্যবহার করে পাইথন ওয়েব স্ক্র্যাপিং বাস্তবায়ন করছে

  2. পাইথন এবং স্ক্র্যাপি ব্যবহার করে ওয়েব স্ক্র্যাপিং?

  3. পাইথনে lxml ব্যবহার করে ওয়েব স্ক্র্যাপিং বাস্তবায়ন করছেন?

  4. পাইথন ব্যবহার করে একাধিক ফাইলের নাম পরিবর্তন করুন