প্রেরণা
কখনও কখনও, আমরা ছবিটি পেতে চাই তবে এটি বাস্তব ফাইলগুলিতে ডাউনলোড করার দরকার হয় না,
উদাহরণস্বরূপ, ডেটা ডাউনলোড করুন এবং মেমরিতে রাখুন।
উদাহরণস্বরূপ, যদি আমি মেশিন লার্নিং পদ্ধতিটি ব্যবহার করি তবে এমন একটি মডেলকে প্রশিক্ষণ দিন যা নম্বর (বার কোড) সহ কোনও চিত্রকে চিনতে পারে।
যখন আমি কয়েকটি ওয়েবসাইট মাকড়সা করি এবং সেগুলিতে এই চিত্রগুলি থাকে যাতে আমি এটি সনাক্ত করতে মডেলটি ব্যবহার করতে পারি,
এবং আমি এই ছবিগুলি আমার ডিস্ক ড্রাইভে সংরক্ষণ করতে চাই না,
তারপরে আপনি মেমরিতে ডেটা ডাউনলোড করতে সহায়তা করতে নীচের পদ্ধতিটি ব্যবহার করতে পারেন।
পয়েন্ট
import requests
from io import BytesIO
response = requests.get(url)
with BytesIO as io_obj:
for chunk in response.iter_content(chunk_size=4096):
io_obj.write(chunk)
মূলত, @ রণভিজয় কুমারের মতো
একটি উদাহরণ
import requests
from typing import NewType, TypeVar
from io import StringIO, BytesIO
import matplotlib.pyplot as plt
import imageio
URL = NewType('URL', str)
T_IO = TypeVar('T_IO', StringIO, BytesIO)
def download_and_keep_on_memory(url: URL, headers=None, timeout=None, **option) -> T_IO:
chunk_size = option.get('chunk_size', 4096) # default 4KB
max_size = 1024 ** 2 * option.get('max_size', -1) # MB, default will ignore.
response = requests.get(url, headers=headers, timeout=timeout)
if response.status_code != 200:
raise requests.ConnectionError(f'{response.status_code}')
instance_io = StringIO if isinstance(next(response.iter_content(chunk_size=1)), str) else BytesIO
io_obj = instance_io()
cur_size = 0
for chunk in response.iter_content(chunk_size=chunk_size):
cur_size += chunk_size
if 0 < max_size < cur_size:
break
io_obj.write(chunk)
io_obj.seek(0)
""" save it to real file.
with open('temp.png', mode='wb') as out_f:
out_f.write(io_obj.read())
"""
return io_obj
def main():
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'Cache-Control': 'max-age=0',
'Connection': 'keep-alive',
'Host': 'statics.591.com.tw',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36'
}
io_img = download_and_keep_on_memory(URL('http://statics.591.com.tw/tools/showPhone.php?info_data=rLsGZe4U%2FbphHOimi2PT%2FhxTPqI&type=rLEFMu4XrrpgEw'),
headers, # You may need this. Otherwise, some websites will send the 404 error to you.
max_size=4) # max loading < 4MB
with io_img:
plt.rc('axes.spines', top=False, bottom=False, left=False, right=False)
plt.rc(('xtick', 'ytick'), color=(1, 1, 1, 0)) # same of plt.axis('off')
plt.imshow(imageio.imread(io_img, as_gray=False, pilmode="RGB"))
plt.show()
if __name__ == '__main__':
main()