۳ روش ساده برای دانلود فایلها با Python
۶ بهمن ۱۳۹۹
در این مقاله تصمیم داریم تا با توسعهی یک اسکریپت Python و برخی کتابخانههای استاندارد این زبان یک فایل را به سه روش از اینترنت دانلود کنیم.
۱) urllib.request.urlretrieve
کتابخانه urllib در زبان Python طیف وسیعی از توابع را برای مدیریت کارهای معمول مرتبط با URL طراحی کرده است که شامل parsing، requesting و دانلود فایلها میشود. حال سعی بر این است که با استفاده از این کتابخانه، فایل robots.txt
در سایت google.com را دانلود کنیم:
from urllib import request
# Define the remote file to retrieve
remote_url = 'https://www.google.com/robots.txt'
# Define the local filename to save data
local_file = 'local_copy.txt'
# Download remote and save locally
request.urlretrieve(remote_url, local_file)
پس از اجرای کدهای بالا، فایل local_copy.txt
را مشاهده خواهید کرد. البته توجه داشته باشید بر اساس مستندات Python ممکن است urlretrieve
در آینده منسوخ شود اما زمان دقیق آن مشخص نیست.
۲) requests.get
requests یک کتابخانه فوقالعاده و بسیار human-friendly برای کار با HTTP در زبان Python است. بااینحال برای دانلود فایل بایستی در ابتدا دادههای فایل را دریافت کرده و سپس محتوای آن را بهصورت فایل ذخیره کنید:
import requests
# Define the remote file to retrieve
remote_url = 'https://www.google.com/robots.txt'
# Define the local filename to save data
local_file = 'local_copy.txt'
# Make http request for remote file data
data = requests.get(remote_url)
# Save file data to local copy
with open(local_file, 'wb')as file:
file.write(data.content)
یکی از جنبههای مهم که باید آن را بهخاطر بسپارید، انتقال دادههای فایل با فرمت باینری در این رویکرد است اما زمانی که یک مرورگر وب، یک صفحه یا فایل را بارگیری میکند، آن فایل با استفاده از رمزنگاری مشخص شدهای مانند UTF-8 و Latin-1 رمزنگاری میشود و نتیجه این کار مرورگر را قادر میسازند تا فایل را پس از دریافت به کاربر نمایش دهد.
۳) wget.download
با استفاده از کتابخانه wget در Python میتوانیم با روشی مشابه urllib فایل مورد نظر خود را دانلود کنیم و همچنین این کتابخانه بهدلیل شباهت با دستور wget در Linux توجه بسیار زیادی را به خود جلب کرده است. البته باید توجه داشته باشید که این ماژول آخرین بار در سال ۲۰۱۵ بهروزرسانی شده است:
import wget
# Define the remote file to retrieve
remote_url = 'https://www.google.com/robots.txt'
# Define the local filename to save data
local_file = 'local_copy.txt'
# Make http request for remote file data
wget.download(remote_url, local_file)
فانکشن wget.download
ترکیبی از urllib، tempfile و shutil بهحساب میآید زیرا روند بازیابی دادههای بارگیری شده، ذخیره در یک فایل موقت، انتقال آن فایل و تغییر نام آن به مسیر مشخص شده با همین فانکشن انجام میشود.
جمعبندی
دانلود فایل با استفاده از کتابخانههای استانداردی مانند urllib
در زبان Python بسیار ساده است. همچنین کتابخانههایی مانند requests وجود دارند که سادهترین روش برای کار با API و درخواستهای HTTP را در ارائه میدهند اما باید توجه داشته باشید که قابلیتی مانند URL parsing در urllib ارائه میشود و این قابلیت در کتابخانه requests وجود ندارد.
منبع: https://medium.com/better-programming/3-simple-ways-to-download-files-with-python-569cb91acae6