خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

نحوه خراش دادن تصاویر از وب در پایتون

تمام تصاویر یک صفحه وب را فقط با چند خط کد پایتون دانلود کنید.

اسکراپر تصویر پایتون فقط ابزاری برای تقویت مهارت های برنامه نویسی شما نیست. همچنین می توانید از آن برای منبع تصاویر برای پروژه یادگیری ماشینی یا تولید تصاویر کوچک سایت استفاده کنید. در حالی که ممکن است راه‌های دیگری برای انجام کارهای مشابه وجود داشته باشد، هیچ چیز نمی‌تواند کنترلی را که با استفاده از ابزارهایی که خودتان می‌سازید، کنترل کند.

یاد بگیرید که چگونه تصاویر را از هر وب سایتی با استفاده از پایتون و کتابخانه BeautifulSoup خراش دهید.

آیا تراشیدن تصویر قانونی است؟

مانند خراش دادن وب عمومی تر، خراش دادن تصویر روشی برای دانلود محتوای وب سایت است. این غیرقانونی نیست، اما برخی قوانین و بهترین شیوه ها وجود دارد که باید از آنها پیروی کنید. ابتدا، اگر یک وب‌سایت به صراحت بیان می‌کند که شما را نمی‌خواهد، باید از خراش دادن آن خودداری کنید. می توانید با جستجوی فایل /robots.txt در سایت مورد نظر متوجه این موضوع شوید.

اکثر وب سایت ها خزیدن وب را مجاز می دانند زیرا می خواهند موتورهای جستجو محتوای آنها را فهرست کنند. شما می توانید چنین وب سایت هایی را خراش دهید زیرا تصاویر آنها در دسترس عموم است.

با این حال، فقط به این دلیل که می‌توانید یک تصویر را دانلود کنید، به این معنی نیست که می‌توانید از آن به‌گونه‌ای استفاده کنید که گویی متعلق به خودتان است. اکثر وب سایت ها برای جلوگیری از انتشار مجدد تصاویر یا استفاده مجدد از آنها به روش های دیگر مجوز می دهند. همیشه فرض کنید که نمی توانید از تصاویر استفاده مجدد کنید مگر اینکه معافیت خاصی وجود داشته باشد.

مطلب مرتبط:   7 بهترین روش برای نامگذاری نقاط پایانی API شما

تنظیم بسته پایتون

قبل از شروع باید چند بسته را نصب کنید. اگر پایتون را روی رایانه خود نصب ندارید، برای دانلود و نصب آخرین نسخه به وب سایت رسمی python.org مراجعه کنید.

در مرحله بعد، ترمینال خود را در پوشه پروژه خود باز کنید و یک محیط مجازی پایتون را فعال کنید تا وابستگی های خود را ایزوله کند.

در نهایت، درخواست ها و بسته های BeautifulSoup را با استفاده از pip نصب کنید:

pip install bs4 requests

خراش دادن تصویر با پایتون

برای این آموزش خراش دادن تصویر، از کتابخانه درخواست ها برای واکشی یک صفحه وب حاوی تصاویر هدف استفاده خواهید کرد. سپس پاسخ آن وب سایت را به BeautifulSoup ارسال می کنید تا تمام آدرس های پیوند تصویر را از تگ های img بگیرید. سپس هر فایل تصویری را در یک پوشه برای دانلود تصاویر بنویسید.

نحوه واکشی URL های تصویر با Python BeautifulSoup

حالا پیش بروید و یک فایل پایتون در پوشه ریشه پروژه خود ایجاد کنید. مطمئن شوید که پسوند .py را به نام فایل اضافه کرده اید.

هر قطعه کد در این آموزش از قسمت قبلی ادامه می یابد.

فایل پایتون را با هر ویرایشگر کد خوب باز کنید و از کد زیر برای درخواست یک صفحه وب استفاده کنید:

import requests
URL = "imagesiteURL"# Replace this with the website's URL
getURL = requests.get(URL, headers={"User-Agent":"Mozilla/5.0"})
print(getURL.status_code)

اگر برنامه فوق یک کد پاسخ 200 را خروجی دهد، درخواست موفقیت آمیز بوده است. در غیر این صورت، ممکن است بخواهید اطمینان حاصل کنید که اتصال شبکه شما پایدار است. همچنین، اطمینان حاصل کنید که یک URL معتبر ارائه کرده اید.

مطلب مرتبط:   نحوه استفاده از رویدادهای اشاره گر در جاوا اسکریپت

اکنون از BeautifulSoup برای خواندن محتوای صفحه وب با کمک html_parser استفاده کنید:

from bs4 import BeautifulSoup
 
soup = BeautifulSoup(getURL.text, 'html.parser')
 
images = soup.find_all('img')
print(images)

این کد لیستی از اشیاء را ایجاد می کند که هر یک تصویری از صفحه وب را نشان می دهد. با این حال، آنچه شما از این داده ها نیاز دارید، متن ویژگی src هر تصویر است.

برای استخراج منبع از هر تگ img:

imageSources = []
 
for image in images:
    imageSources.append(image.get('src'))
 
print(imageSources)

کد خود را مجدداً اجرا کنید و آدرس های تصویر اکنون باید در یک لیست جدید (imageSources) ظاهر شوند. شما با موفقیت هر منبع تصویر را از صفحه وب مورد نظر استخراج کرده اید.

نحوه ذخیره تصاویر با پایتون

ابتدا یک پوشه مقصد دانلود در دایرکتوری ریشه پروژه خود ایجاد کنید و نام آن را تصاویر بگذارید.

برای اینکه پایتون بتواند تصاویر را با موفقیت بارگیری کند، مسیرهای آنها باید URL های مطلق کامل باشد. به عبارت دیگر، آنها باید پیشوند “http://” یا “https://” را به اضافه دامنه کامل وب سایت داشته باشند. اگر صفحه وب به تصاویر خود با استفاده از URL های نسبی ارجاع می دهد، باید آنها را به URL های مطلق تبدیل کنید.

در حالت آسان، زمانی که URL مطلق است، شروع دانلود فقط یک مورد درخواست هر تصویر از منابع استخراج شده قبلی است:

for image in imageSources:
    webs = requests.get(image)
    open('images/' + image.split('/')[-1], 'wb').write(webs.content)

کلمه کلیدی image.split(‘/’)[-1] پیوند تصویر را در هر اسلش جلو (/) تقسیم می کند. سپس نام فایل تصویری (شامل هر پسوندی) را از آخرین عنصر بازیابی می کند.

مطلب مرتبط:   برای افزایش بهره وری به بسته های آزمایشی بروید

به خاطر داشته باشید که در موارد نادر، نام فایل های تصویر ممکن است با هم برخورد کنند و در نتیجه بارگیری بازنویسی شود. در صورت تمایل به بررسی راه حل های این مشکل به عنوان بسط این مثال بپردازید.

URL های مطلق می توانند بسیار پیچیده باشند و موارد لبه زیادی را پوشش دهند. خوشبختانه، یک روش مفید در بسته requests.compat به نام urljoin وجود دارد. این روش یک URL کامل را با یک URL پایه و یک URL که ممکن است نسبی باشد برمی گرداند. این به شما امکان می دهد مقادیری را که در ویژگی های href و src پیدا می کنید، حل کنید.

کد نهایی به شکل زیر است:

from bs4 import BeautifulSoup
URL = "imagesiteURL"# Replace this with the website's URL
getURL = requests.get(URL, headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup(getURL.text, 'html.parser')
 
images = soup.find_all('img')
resolvedURLs = []
 
for image in images:
    src = image.get('src')
    resolvedURLs.append(requests.compat.urljoin(URL, src))
 
for image in resolvedURLs:
    webs = requests.get(image)
    open('images/' + image.split('/')[-1], 'wb').write(webs.content)

هرگز از داده های تصویر کوتاه نروید

بسیاری از پروژه های تشخیص تصویر به دلیل تعداد ناکافی تصاویر برای آموزش یک مدل به دیوار آجری برخورد می کنند. اما شما همیشه می توانید تصاویر را از وب سایت ها برای تقویت مخزن داده خود پاک کنید. و خوشبختانه، پایتون یک اسکرابر تصویر قدرتمند است که می‌توانید به طور مداوم بدون ترس از گران شدن از آن استفاده کنید.

اگر علاقه مند به واکشی انواع دیگر داده ها از وب هستید، ممکن است بخواهید نحوه استفاده از Python را برای اسکراپینگ عمومی وب بیابید.