מגרד תמונה של Python הוא לא רק כלי לחידוד כישורי התכנות שלך. אתה יכול גם להשתמש בו למקור תמונות עבור פרויקט למידת מכונה, או ליצור תמונות ממוזערות של האתר. למרות שעשויות להיות דרכים אחרות לעשות דברים דומים, שום דבר לא יכול לנצח את השליטה שיש לך באמצעות כלים שאתה בונה בעצמך.
למד כיצד לגרד תמונות מכל אתר באמצעות Python וספריית BeautifulSoup.
האם גירוד תמונה חוקי?
כמו גירוד אינטרנט כללי יותר, גירוד תמונה היא שיטה להורדת תוכן אתר. זה לא לא חוקי, אבל יש כמה כללים ושיטות עבודה מומלצות שאתה צריך לעקוב אחריהם. ראשית, עליך להימנע מגירוד אתר אם הוא מציין במפורש שהוא לא רוצה שתעשה זאת. אתה יכול לגלות זאת על ידי חיפוש א /robots.txt קובץ באתר היעד.
רוב האתרים מאפשרים סריקת אינטרנט מכיוון שהם רוצים שמנועי חיפוש יכנסו לאינדקס את התוכן שלהם. אתה יכול לגרד אתרים כאלה מכיוון שהתמונות שלהם זמינות לציבור.
עם זאת, רק בגלל שאתה יכול להוריד תמונה, זה לא אומר שאתה יכול להשתמש בה כאילו היא שלך. רוב האתרים מעניקים רישיון לתמונות שלהם כדי למנוע ממך לפרסם אותן מחדש או לעשות בהן שימוש חוזר בדרכים אחרות. הנחה תמיד שאינך יכול לעשות שימוש חוזר בתמונות אלא אם כן יש פטור ספציפי.
הגדרת חבילת Python
תצטרך להתקין כמה חבילות לפני שתתחיל. אם אין לך Python מותקן במחשב שלך, בקר באתר הרשמי python.org אתר להורדה והתקנה של הגרסה העדכנית ביותר.
לאחר מכן, פתח את הטרמינל שלך לתיקיית הפרויקט שלך ו להפעיל סביבה וירטואלית של Python לבודד את התלות שלך.
לבסוף, התקן את בקשות ו מרק יפה חבילות באמצעות pip:
pip להתקין bs4 בקשות
גירוד תמונה עם פייתון
עבור הדרכה זו לגירוד תמונות, תשתמש ב- בקשות ספרייה כדי להביא דף אינטרנט המכיל את תמונות היעד. לאחר מכן תעביר את התגובה מאתר זה אל מרק יפה כדי לתפוס את כל כתובות הקישור לתמונה img תגים. לאחר מכן תכתוב כל קובץ תמונה לתיקיה כדי להוריד את התמונות.
כיצד להביא כתובות אתרים של תמונות עם ה- BeautifulSoup של Python
כעת קדימה, צור קובץ Python בתיקיית השורש של הפרויקט שלך. ודא שאתה מצרף את ה .py סיומת לשם הקובץ.
כל קטע קוד במדריך זה ממשיך מהקודם.
פתח את קובץ Python עם כל עורך קוד טוב והשתמש בקוד הבא כדי לבקש דף אינטרנט:
יְבוּא בקשות
כתובת אתר = "imagesiteURL" # החלף את זה בכתובת האתר של האתר
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
הדפס (getURL.status_code)
אם התוכנית שלמעלה מוציאה קוד תגובה של 200, הבקשה הצליחה. אחרת, ייתכן שתרצה לוודא שחיבור הרשת שלך יציב. כמו כן, ודא שסיפקת כתובת אתר חוקית.
עכשיו השתמש מרק יפה לקרוא את התוכן של דף האינטרנט בעזרת ה html_parser:
מ bs4 יְבוּא מרק יפה
soup = BeautifulSoup (getURL.text, 'html.parser')
images = soup.find_all('img')
הדפס (תמונות)
קוד זה יוצר רשימה של אובייקטים, שכל אחד מהם מייצג תמונה מדף האינטרנט. עם זאת, מה שאתה צריך מהנתונים האלה הוא הטקסט של כל תמונה src תְכוּנָה.
לחלץ את המקור מכל אחד img תָג:
imageSources = []
ל תמונה ב תמונות:
imageSources.append (image.get('src'))
הדפס (מקורות תמונה)
הפעל מחדש את הקוד שלך, וכתובות התמונה אמורות להופיע כעת ברשימה חדשה (מקורות תמונה). חילצת בהצלחה כל מקור תמונה מדף האינטרנט היעד.
כיצד לשמור את התמונות עם Python
ראשית, צור תיקיית יעד להורדה בספריית השורש של הפרויקט שלך ושמה לה תמונות.
כדי ש-Python יוריד את התמונות בהצלחה, הנתיבים שלהן צריכים להיות כתובות URL מוחלטות מלאות. במילים אחרות, הם צריכים לכלול את " http://" או " https://" קידומת, בתוספת הדומיין המלא של האתר. אם דף האינטרנט מפנה לתמונות שלו באמצעות כתובות URL יחסיות, תצטרך להמיר אותן לכתובות URL מוחלטות.
במקרה הקל, כאשר כתובת ה-URL היא מוחלטת, תחילת ההורדה היא רק מקרה של בקשה של כל תמונה מהמקורות הקודמים שחולצו:
ל תמונה ב מקורות תמונה:
webs = requests.get (תמונה)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
ה image.split('/')[-1] מילת מפתח מפצלת את קישור התמונה בכל קו נטוי קדימה (/). לאחר מכן הוא מאחזר את שם קובץ התמונה (כולל כל סיומת) מהאלמנט האחרון.
זכור שבמקרים נדירים, שמות קבצי תמונה עלולים להתנגש, וכתוצאה מכך לדרוס הורדה. אל תהסס לחקור פתרונות לבעיה זו כהרחבה לדוגמה זו.
כתובות URL מוחלטות יכולות להיות מסובכות למדי, עם הרבה מקרי קצה לכיסוי. למרבה המזל, יש שיטה שימושית ב- requests.compat חבילה שנקראה urljoin. שיטה זו מחזירה כתובת URL מלאה, בהינתן כתובת URL בסיסית וכתובת URL שעשויה להיות יחסית. זה מאפשר לך לפתור ערכים שתמצא בהם href ו src תכונות.
הקוד הסופי נראה כך:
מ bs4 יְבוּא מרק יפה
כתובת אתר = "imagesiteURL" # החלף את זה בכתובת האתר של האתר
getURL = requests.get (URL, headers={"User-Agent":"Mozilla/5.0"})
soup = BeautifulSoup (getURL.text, 'html.parser')images = soup.find_all('img')
כתובות URL פתורות = []ל תמונה ב תמונות:
src = image.get('src')
resolvedURLs.append (requests.compat.urljoin (URL, src))
ל תמונה ב כתובות URL שנפתרו:
webs = requests.get (תמונה)
open('images/' + image.split('/')[-1], 'wb').write (webs.content)
לעולם אל תחסר נתוני תמונה
פרויקטים רבים של זיהוי תמונות פוגעים בקיר לבנים עקב כמות לא מספקת של תמונות להכשרת דוגמנית. אבל אתה תמיד יכול לגרד תמונות מאתרים כדי להגביר את מאגר הנתונים שלך. ולמרבה המזל, Python הוא מגרד תמונה רב עוצמה שאתה יכול להשתמש בו ללא הרף מבלי לחשוש שיתמחור.
אם אתה מעוניין להביא סוגים אחרים של נתונים מהאינטרנט, אולי תרצה לברר כיצד להשתמש ב-Python עבור גירוד אינטרנט כללי.